[英]Logical operator with Arithmetic operator in C
我遇到了一个问题,我想验证我的假设是否正确。
鉴于以下代码:
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
为什么j
的值仍为1
而不是2
? 可以安全地假设逻辑运算符||
之后的任何算术运算 &&
只会在它使用的行(在这种情况下,第2行)生效,之后变量仍然保留其原始值?
||
当第一个操作数nonzero
时,运算符不会对第二个操作数执行任何操作。
因为,任何一个操作数都不non-zero
那么||
输出将为true
操作员操作。 在您的代码中,第一个操作数non-zero
。 这就是为什么不执行第二个操作数的操作。
如您的准则的第二行,即
ans = i++ || ++j;
首先它会检查i++
因为它不是零,这意味着它是真的。 在OR
条件下,如果第一个条件为真,则不会检查第二个条件,即++j
。
因为如果第一个条件为真无关紧要,则第二个条件为TRUE或FALSE它将返回一个真值。 因此,如果First Condition为true,则不会检查其他条件。
逻辑运算符短路。 也就是说,在以下内容中:
ans = i++ || ++j;
如果i++
计算结果为真(非零),则永远不会评估++j
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.