C 如何评估i==(20 | 10)? #包括 内部主(空) { int i=10; 如果(i==(20 | 10)) printf(“真实”); 其他的 printf(“假”); 返回0; }
这使得输出为假 请向我解释一下这个程序是如何工作的?这一行C 如何评估i==(20 | 10)? #包括 内部主(空) { int i=10; 如果(i==(20 | 10)) printf(“真实”); 其他的 printf(“假”); 返回0; },c,logical-operators,C,Logical Operators,这使得输出为假 请向我解释一下这个程序是如何工作的?这一行如果(i==(20 | 10))总是计算为i==1,正如Alk在注释中所说的那样-(20 | 10)计算为1,因此当你比较i==1时,这就是为什么你会得到False。C中的非零值表示为真 了解 也许这就是你想要的: #include <stdio.h> int main(void) { int i=10; if(i==(20||10)) printf("True"); else p
如果(i==(20 | 10))
总是计算为i==1
,正如Alk
在注释中所说的那样-(20 | 10)
计算为1
,因此当你比较i==1
时,这就是为什么你会得到False
。C
中的非零值表示为真
了解
也许这就是你想要的:
#include <stdio.h>
int main(void)
{
int i=10;
if(i==(20||10))
printf("True");
else
printf("False");
return 0;
}
看看if(i==(20 | | 10))
。由于内圆括号的缘故,首先计算20 | | 10
,得到1
。然后,将值为10
的变量i
与1
进行比较,得到0
在C中,
0
表示False
,而所有非零值表示True
。因此,条件变为False
。因此,“False”被打印出来。如果(i==(20 | | 10))不能像您预期的那样工作,您是否认为10==1
?OP的问题也不是布尔短路问题。@alk-您不认为表达式20 | 10
中的表达式根本不需要求值吗?当然,但这对结果没有影响。
int i=10;
if(i==20 || i == 10)
printf("True");
else
printf("False");