boolean — C ++: почему это логическое выражение оценивается как ложное?

int a = 10, b = 12, c = 8

!((a < 5) || (c < (a + b)))

Я только что попробовал это в компиляторе, и это было ложно.

-8

Решение

Внутреннее выражение:

(a < 5) || (c < (a + b))

оценивает a < 5 как false (поскольку a является 10) а также c < (a + b) как true (поскольку 8 меньше чем 10+12). Выполнение логической операции «или» над false а также true дает тебе true,

И, учитывая, что следующее, что вы делаете с этим значением, это ! (инверсия), что true превращается в false,

3

Другие решения

c < (a + b) == 8 < (10 + 12) == 8 < 22 == true
a < 5 == 10 < 5 == false
(a < 5) || (c < (a + b)) == false || true == true
!((a < 5) || (c < (a + b))) == !(true) == false
0