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");