Почему 1 является значением переменной var после ввода оператора if? - PullRequest
0 голосов
/ 04 мая 2020

Здесь вы можете увидеть список, и я знаю, что это назначение в операторе if, а не сравнение. Поэтому, пожалуйста, не советуйте, чтобы вы знали это лучше. Я просто хочу знать, почему значение var равно 1 после присвоения в операторе if.

int var = 0;
if(var = -5 || 5)
{
    // Value of var is 1, but why? Shouldn´t it be -5 or 5?
    printf("%d", var);
}

1 Ответ

0 голосов
/ 05 мая 2020

In C (x||y) - логическое выражение - выражение, результатом которого всегда является true (1) или false (0). То же самое верно для && (и) и ! (не).

И, if (x = y) - это то же самое, что и if (y) с побочным эффектом назначения y для x. То есть:

Для оценки:

if (var = -5 || 5)  ...

Это

if ((var = -5) || 5)   ...

или?

if (var = (-5 || 5))   ... 

Это второе, потому что | | имеет более высокий приоритет: https://en.cppreference.com/w/c/language/operator_precedence

Потому что:

(-5 || 5) ---> 1

... теперь у нас есть ...

if (var = 1)  ...

1 is присваивается переменной var (= - присваивание, == - равенство значений) Поскольку в C оператор a=b также является выражением, новое значение которого является новым значением, если a, теперь у нас есть:

if (var) ...

... потому что тесты верны, потому что var равен 1, а ненулевые целые числа истинны в C.

...