Оценка логического операнда

Если у меня есть следующее:

int a = -10 && 0;

то C оценивает -10 как 1 потому что -10 отличается от 0 а затем делает сравнение между 1 && 0 чтобы получить 0 в результате? Или позволяет -10 сделать сравнение как написано?

Вместо этого, если я напишу:

int c = 10;
int b = 11;

int res = c > 10 && b == 11;

то C делает это:

c > 10 является ложным, поэтому он вычисляет 0 а b == 11 - true, поэтому он оценивает значение 1

то выражение:

0 && 1 с 0.

2 ответа

Оператор && и || имеет режим короткого замыкания 1. В

int a = -10 && 0;

так как левый операнд -10, который отличен от нуля и, следовательно, true, поэтому правый операнд, т.е. 0, проверяется. В

int res = c > 10 && b == 11;

поскольку левый операнд оценивается как false, правый операнд не оценивается.

1 C11 6.5.13 (p4): Если первый операнд сравнивается с 0, второй операнд не оценивается.


Для

int a = -10&&0;

-10 рассматривается как более высокая логика (1). Однако результат все равно равен 0.

licensed under cc by-sa 3.0 with attribution.