C程序输出混乱

Apo*_*ani 6 c

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

x && y给出1.仍然输出为false.

#include <stdio.h>

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

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Riz*_*123 6

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

x && (y == 1)
Run Code Online (Sandbox Code Playgroud)

y == 1  // 2 == 1
//Result: false
Run Code Online (Sandbox Code Playgroud)

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

x && false  //1 && false
//Result: false
Run Code Online (Sandbox Code Playgroud)

所以if语句将是false

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