C程序输出混乱

时间:2015-02-24 16:04:45

标签: c

有人可以解释为什么这个程序的输出是假的吗?

x&& y给出1.输出仍然是假的。

#include <stdio.h>

int main()
{
    int x = 1, y = 2;
    if(x && y == 1)
    {
        printf("true.");
    }
    else
    {
        printf("false.");
    }

    return 0;
}

4 个答案:

答案 0 :(得分:6)

因为==的优先级高于&&所以首先要对此进行评估:

x && (y == 1)

y == 1  // 2 == 1
//Result: false

哪个是假的,然后是第二个:

x && false  //1 && false
//Result: false

所以if语句将为false

有关运算符优先级的详细信息,请参阅此处:http://en.cppreference.com/w/cpp/language/operator_precedence

答案 1 :(得分:1)

if(x && y == 1)

相同
if( ( x != 0 ) && ( y == 1 ) )

此处x != 0为真,但y == 1为假。并且由于&&的至少一个操作数为false,因此条件的计算结果为false,else部分执行。

答案 2 :(得分:0)

明确指出X = 1&amp; Y = 2; 现在用你的表达

X && Y == 1

表达式评估为 Y == 1(优先规则,同时输出为假)

X!= 0(正确)

现在&amp;&amp;是逻辑和运算符,因此只有当表达式中的两个部分都计算为True时才会计算为True!

答案 3 :(得分:0)

可以假,然后是2和2,它与一个不同。 你要问的是x和y都是否值得1.如果发生这种情况则说真实但是错误