逻辑运算符的基本编程练习

前端之家收集整理的这篇文章主要介绍了逻辑运算符的基本编程练习前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的书中有一个问题:
#include<stdio.h>
void main()
{
    int a=5,b=-7,c=0,d;
    d = ++a && ++b || ++c;
    printf("\n%d%d%d%d",a,b,c,d);
}

这个问题问我代码输出是什么.我跑了,屏幕上的结果是6-601.我理解为什么a = 6和b = -6,但我不明白为什么c = 0和d = 1?

解决方法

我相信你已经得到了答案,但只是逐步详细说明,让我在这里再补充一点.首先,引用&& amp;的特性.和||操作符,分别来自C11标准,章节§6.5.13和§6.5.13,

(一世)

The && operator shall yield 1 if both of its operands compare unequal to 0; otherwise,it
yields 0. […] If the first operand compares equal to 0,the second
operand is not evaluated.

(II)

The || operator shall yield 1 if either of its operands compare unequal to 0; otherwise,it
yields 0. […]. If the first operand compares unequal to 0,the second operand is
not evaluated.

他们都保证从左到右的评估.所以,比较你的代码,

d = ++a && ++b || ++c;

它发生了

d = ((++a && ++b) || ++c );

评估为

d = (( 6 && ++b ) || ++c);

然后

d = ( ( 6 && (-6) ) || ++c);

现在在上面的阶段,(I)已经实现了,它归结为

d = ( 1 || ++c);

现在,遵循已经满足(II)的重点,因此没有进一步评估||的RHS操作数执行(即,不评估c),并且它看起来是d = 1并且最终结果1存储在d中.

那就是,a == 6,b == -6,c == 0和d == 1.

话虽如此,void main()应该改为int main(void),至少要符合标准.

猜你在找的C&C++相关文章