为什么1是表达式产生的结果

时间:2014-08-22 13:49:50

标签: c

有人可以解释为什么这个表达式会产生1吗?

i = 1 && 2 + 3 | 4;

这里的操作顺序是什么?

3 个答案:

答案 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优先顺序表。

Operators in C and C++