Помимо того, что описано в других ответах, стоит отметить, что &&
и ||
имеют приоритет от &
и |
.
Извлечение из таблицы приоритетов (с наивысшим приоритетом вверху).
bitwise AND &
bitwise exclusive OR ^
bitwise inclusive OR |
logical AND &&
logical OR ||
Что это значит для вас?
Абсолютно ничего, пока вы придерживаетесь только &
и |
или только &&
и ||
.
Но, поскольку |
имеет более высокий приоритет, чем &&
(в отличие от ||
, который имеет более низкий приоритет), свободное их смешивание может привести к неожиданному поведению.
То есть a && b | c && d
совпадает с a && (b | c) && d
,
в отличие от a && b || c && d
, который будет (a && b) || (c && d)
.
Чтобы доказать, что они не совпадают, рассмотрим выдержку из таблицы истинности:
a | b | c | d | (b|c) | (a&&b) | (c&&d) | a && (b|c) && d | (a&&b) || (c&&d)
F | T | T | T | T | F | T | F | T
^ ^
|- not the same -|
Если вы хотите, чтобы OR имел более высокий приоритет, чем AND, вы могли бы использовать |
и &&
вместе, но это не рекомендуется.
Но вам действительно следует заключать их в квадратные скобки, чтобы уточнить приоритет при использовании разных символов, т. Е. (a && b) || c
(скобки, чтобы уточнить приоритет), a && b && c
(без скобок).