我如何评估?=(20 || 10)?

#include  int main(void) { int i=10; if(i==(20||10)) printf("True"); else printf("False"); return 0; } 

这给出了输出False

请解释一下这个程序是如何工作的?

这行if(i==(20||10))总是求值为i==1因为Alk在评论中说 – (20||10)求值为1 ,因此当你比较i == 1 ,这就是为什么你得到False作为输出。 C的非零值意味着为真。

阅读有关短路评估的内容

也许这就是你想要的:

 int i=10; if(i==20 || i == 10) printf("True"); else printf("False"); 

看看if(i==(20||10)) 。 由于内括号,首先评估20||10 ,得到1 。 然后,将值为10变量i1进行比较,得到0

在C中, 0表示False ,而所有非零值表示True 。 所以情况变得False 。 因此,打印“假”。