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

时间:2014-11-18 04:11:44

标签: c logical-operators

我遇到了一个问题,我想验证我的假设是否正确。

给出以下代码:

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行)有效,之后变量仍然保留其原始值?

3 个答案:

答案 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++