条件表达式,例如那些涉及&&和||的表达式 ,他们总是评估为 0 还是 1?或者对于真实情况,1以外的数字是可能的?我问是因为我想分配这样的变量。
int a = cond1 && cond2;
我想知道我是否应该改为执行以下操作。
int a = (cond1 && cond2)? 1:0;
条件表达式,例如那些涉及&&和||的表达式 ,他们总是评估为 0 还是 1?或者对于真实情况,1以外的数字是可能的?我问是因为我想分配这样的变量。
int a = cond1 && cond2;
我想知道我是否应该改为执行以下操作。
int a = (cond1 && cond2)? 1:0;
逻辑运算符(&&
、||
和!
)都计算为1
or 0
。
C99 §6.5.13/3:
如果两个操作数比较不等于,则运算
&&
符应让步;否则,它会产生. 结果有类型。1
0
0
int
C99 §6.5.14/3:
如果任一操作数比较不等于,则运算
||
符应让步;否则,它会产生. 结果有类型。1
0
0
int
C99 6.5.3.3/5:
逻辑否定运算符的结果
!
是0
如果其操作数的值比较不等于0
,1
如果其操作数的值比较等于0
。结果有类型int
。表达式 !E 等价于 (0==E)。
'&&'
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.
逻辑与和逻辑或表达式的操作数从左到右计算。如果第一个操作数的值足以确定运算结果,则不计算第二个操作数。这称为“短路评估”。在第一个操作数之后有一个序列点。
谢谢, :)