【发布时间】:2017-05-16 15:18:12
【问题描述】:
为什么下面的代码执行后j的值为零?
int main()
{
int i = 0, j = 0;
if (i && (j = i + 10))
//do something ;
}
如果我将逻辑与替换为按位与,为什么值10?
另外,为什么在执行下面的代码后 j 的值又为零?
int i = 10, j = 0;
if (i || (j = i + 10))
//do something
;
【问题讨论】:
-
因为逻辑运算是短路的。按位不是。
-
您还能期待什么?为什么?
-
最后一种情况,如果是||运算符,因为 i 不是 1,它不应该短路并继续进行。然后 j 应该变成 10。这就是我所期望的@Olaf
-
@RajeshSh 在 C 中,All 非零整数为真,而不仅仅是
1。零是假的。因此,true || something的计算结果为true,而something未计算。
标签: c bitwise-operators logical-operators