有人可以解释为什么这个表达式会产生1吗?
i = 1 && 2 + 3 | 4;
这里的操作顺序是什么?
答案 0 :(得分:9)
i = (1 && ((2 + 3) | 4)))
C中的布尔表达式总是计算为0或1.任何非0的都被认为是真的。
- 1!= 0
- 2 + 3 == 5
- 5 | 4 == 5(|是按位或运算符)
- 5!= 0
- 1&& 5 == 1
答案 1 :(得分:2)
根据运算符优先级,+
具有最高优先级,因此首先计算,然后|
(按位或),然后&&
(逻辑和):
i = 1 && ((2 + 3) | 4)
评估出来:
i = 1 && (5 | 4)
|
是按位或,它返回一个值,该值在每个位置都设置了一个位,其任一操作数都有一个位设置。 5是101
二进制,4是100
,所以按位或是101
,或5:
i = 1 && 5
现在&&
是合乎逻辑的,如果两个值都是真值,则返回1。除0之外的任何值都是真值,因此它返回1.
答案 2 :(得分:1)
如果您不确定,请查看C优先顺序表。