如果我有以下内容:
int a = -10 && 0;
然后C评估-10
为1
,因为-10
与0
不同,然后制作
结果1 && 0
与0
之间的比较结果如何?
或者是否允许-10
并以书面形式进行比较?
相反,如果我写:
int c = 10;
int b = 11;
int res = c > 10 && b == 11;
然后C做出这个:
c > 10
为false,因此评估为0
b == 11
为真,因此评估为1
然后表达式为:
结果为0 && 1
的 0
。
答案 0 :(得分:3)
运营商&&
和||
的短路行为 1 。在
int a = -10 && 0;
因为左操作数是-10
,它是非零的,因此是true
,因此检查右操作数,即0
。在
int res = c > 10 && b == 11;
因为左操作数被评估为false
,所以不评估右操作数。
1 C11 6.5.13(p4):如果第一个操作数比较等于0
,则不评估第二个操作数。
功能
答案 1 :(得分:1)
对于
int a = -10&&0;
-10
被视为更高逻辑(1)。但是,结果仍为0。