条件表达式总是在C中评估为0或1吗?

时间:2012-07-23 17:51:54

标签: c semantics logical-operators

条件表达式(例如涉及&& || 的条件表达式)是否总是评估为0或1?或者对于真实情况,1以外的数字是可能的吗?我问,因为我想分配一个这样的变量。

int a = cond1 && cond2;

我想知道我是否应该做以下事情。

int a = (cond1 && cond2)? 1:0;

2 个答案:

答案 0 :(得分:14)

逻辑运算符(&&||!)都评估为10

C99§6.5.13/ 3:

  

如果&&运算符的两个操作数都不等于1,则0运算符将产生0;否则,它会产生int。结果的类型为||

C99§6.5.14/ 3:

  

如果1运算符的任何一个操作数与0不相等,则0运算符将产生int;否则,它会产生!。结果的类型为0

C99 6.5.3.3/5:

  

逻辑否定运算符0的结果是1,如果其操作数的值不等于0int,如果其操作数的值比较等于{{1}}。结果的类型为{{1}}。   表达式!E等价于(0 == E)。

答案 1 :(得分:0)

'&&'
  The logical-AND operator  produces the value 1 if both operands have nonzero 
  values. If   either operand is equal to 0, the result is 0. If the first operand of a 
  logical-AND operation is equal to 0, the second operand is not evaluated. 

'||'
      The logical-OR operator performs an inclusive-OR operation on its operands. 
  The result  is 0 if both operands have 0 values. If either operand has a nonzero
  value, the result is 1. If the first operand of a logical-OR operation has a nonzero 
  value, the second operand is not evaluated. 

逻辑AND和逻辑OR表达式的操作数从左到右进行计算。如果第一个操作数的值足以确定操作的结果,则不评估第二个操作数。这被称为“短路评估”。在第一个操作数之后有一个序列点。

谢谢,))