繁体   English   中英

C中使用算术运算符的逻辑运算符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM