Может кто-нибудь объяснить, почему вывод этой программы ложный ??

X && y дает 1. По-прежнему вывод ложный.

#include <stdio.h>

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

    return 0;
}
c
6
Apoorva Somani 24 Фев 2015 в 19:04

4 ответа

Лучший ответ

Поскольку == имеет более высокий приоритет, чем &&, сначала выполняется оценка этого get:

x && (y == 1)
y == 1  // 2 == 1
//Result: false

Что неверно, а затем второе:

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

Таким образом, оператор if будет ложным

Дополнительную информацию о приоритете операторов см. Здесь: http://en.cppreference.com/w/ cpp / language / operator_precedence

6
Rizier123 24 Фев 2015 в 16:06

Это нормально, если ложь, тогда 2 и 2, и это отличается от единицы. Вы спрашиваете, стоят ли оба x и y 1. Если это произойдет, скажите true, но false.

0
Alejandro Caro 3 Июл 2016 в 23:22

В нем четко указано: X = 1 & Y = 2; Теперь с вашим выражением

X && Y == 1

Выражение оценивается как Y == 1 (правило приоритета, также вывод - ложь)

X! = 0 (это правда)

Теперь && является логическим оператором И, поэтому он принимает значение Истина, только если обе части в выражении имеют значение Истина !!!

0
Vikram S. Parikh 25 Фев 2015 в 07:24
if(x && y == 1)

Такой же как

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

Здесь x != 0 верно, но y == 1 ложно. И поскольку по крайней мере один из операндов && ложен, условие оценивается как ложное и выполняется часть else.

1
Vlad from Moscow 24 Фев 2015 в 16:09