6

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

int a = cond1 && cond2;

我想知道我是否应该改为执行以下操作。

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

2 回答 2

14

逻辑运算符(&&||!)都计算为1or 0

C99 §6.5.13/3:

如果两个操作数比较不等于,则运算&&符应让步;否则,它会产生. 结果有类型。100int

C99 §6.5.14/3:

如果任一操作数比较不等于,则运算||符应让步;否则,它会产生. 结果有类型。100int

C99 6.5.3.3/5:

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

于 2012-07-23T17:53:25.220 回答
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. 

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

谢谢, :)

于 2012-07-23T18:11:47.803 回答