条件表达式(例如涉及&& 和 || 的条件表达式)是否总是评估为0或1?或者对于真实情况,1以外的数字是可能的吗?我问,因为我想分配一个这样的变量。
int a = cond1 && cond2;
我想知道我是否应该做以下事情。
int a = (cond1 && cond2)? 1:0;
答案 0 :(得分:14)
逻辑运算符(&&
,||
和!
)都评估为1
或0
。
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
,如果其操作数的值不等于0
,int
,如果其操作数的值比较等于{{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表达式的操作数从左到右进行计算。如果第一个操作数的值足以确定操作的结果,则不评估第二个操作数。这被称为“短路评估”。在第一个操作数之后有一个序列点。
谢谢,))