代码:
#include<stdio.h>
int main()
{
int j = 7, i = 4;
j = j || ++i && printf("you can");
printf("%d %d",i,j);
return 0;
}
输出:4 1
[代码链接][1]
- 前缀运算符的优先级高于逻辑运算符。2.Logical
&&
的优先级高于logical||
。 - 在逻辑与(
&&
)中,如果第一个操作数的计算结果为假,则不会计算第二个,而在逻辑或(||)
如果第一个操作数的计算结果为true
,则不会计算第二个。 - 完整的表达式计算结果为
true
,因此 j 为 1 。
疑点:
为什么这里不遵循第一条规则?不应该是正确的吗?
j=(j||((++i) &&printf("you can")));
i
因此,在printf
语句中的值变为 5。
为什么这里违反了一般优先规则?当两个运算符的优先级相同时,关联性就会起作用。编译器不应该先看看是评估||
还是&&
?
如果||
首先评估,这不应该据我所知,那么结果是正确的。但是,如果它没有先被评估,那么你应该打印 can51。