关系运算符评估结果
Relational operators evaluation result
假设我们有一个像
这样的表达式
(x > 5)
C语言。语言/标准是否保证表达式在为假时将被评估为 0
而在为真时将被评估为 1
?
是的,有标准保证。
根据 C11
标准文档,第 6.5.8 章第 6 段,[关系运算符]
Each of the operators <
(less than), >
(greater than), <=
(less than or equal to), and >=
(greater than or equal to) shall yield 1
if the specified relation is true
and 0
if it is
false
. The result has type int
.
更新:C99
标准的相同章节和段落。
在 gcc 中,它将被计算为 1 和 0。
考虑以下程序
#include <stdio.h>
int main(void)
{
int a = 3;
int b = 4;
if((a > b) == 0)
printf("a > b is false\n");
if((a < b) == 1)
printf("a < b is true\n");
return 0;
}
它给出输出
a > b is false
a < b is true
假设我们有一个像
这样的表达式(x > 5)
C语言。语言/标准是否保证表达式在为假时将被评估为 0
而在为真时将被评估为 1
?
是的,有标准保证。
根据 C11
标准文档,第 6.5.8 章第 6 段,[关系运算符]
Each of the operators
<
(less than),>
(greater than),<=
(less than or equal to), and>=
(greater than or equal to) shall yield1
if the specified relation istrue
and0
if it isfalse
. The result has typeint
.
更新:C99
标准的相同章节和段落。
在 gcc 中,它将被计算为 1 和 0。 考虑以下程序
#include <stdio.h>
int main(void)
{
int a = 3;
int b = 4;
if((a > b) == 0)
printf("a > b is false\n");
if((a < b) == 1)
printf("a < b is true\n");
return 0;
}
它给出输出
a > b is false
a < b is true