我遇到了一个问题,我想验证我的假设是否正确。
给出以下代码:
1. int i = -2, j = 1, ans;
2. ans = i++ || ++j;
3. printf("%d %d %d", i,j, ans);
输出为:-1 1 1
在C语言中,似乎只有0
被视为false,当与逻辑运算符一起使用时,任何其他值都将被视为true。所以我不怀疑为什么ans派生到1
(真|| true给我们真实(1))
我想在这里问的是:为什么j
的价值仍为1
,而2
的价值为++j
?
可以安全地假设逻辑运算符||
&&
之后的任何算术运算仅在其使用的行(在本例中为第2行)有效,之后变量仍然保留其原始值?
答案 0 :(得分:2)
||
时, nonzero
运算符不会对第二个操作数执行任何操作。
因为,操作数中的任何一个都是non-zero
,因此true
运算符操作中的输出将为||
。在您的代码中,第一个操作数是non-zero
。这就是为什么不执行第二个操作数的操作。
答案 1 :(得分:1)
与你的守则第二行一样,即
ans = i++ || ++j;
首先它会检查i++
,因为它不是零,这意味着它是真的。
并且在OR
条件中,如果第一个条件为真,则不会检查第二个条件,即++j
。
因为如果第一个条件为真并不重要,则第二个条件为TRUE或FALSE它将返回一个真值。因此,如果First Condition为true,则不会检查其他条件。
答案 2 :(得分:0)
逻辑运算符短路。也就是说,在下面:
ans = i++ || ++j;
如果++j
的计算结果为真(非零),则永远不会评估 i++
。