Недавно я исправил ошибку в программе C, где я был:старшинство оператора в C (! = И |)
if (foobar != FOO | BAR | BAZ)
Правильный код
if (foobar != (FOO | BAR | BAZ))
Согласно C operator precedence оно ясно, что !=
имеет приоритет над |
.
Мой вопрос, почему это так, а не наоборот? Из моего опыта я часто использую либо a == b || a == c
, либо d == (a | b | c)
, но никогда не a == b | c == d
.
Какова логика этого выбора?
'foobar! = FOO | БАР | BAZ' эквивалентен '(foobar!= FOO) | БАР | BAZ', потому что прецедент '! =' Выше, чем '|'. Используйте его, если это то, что вы хотите. – MikeCAT
Поскольку один является двоичным арифметическим оператором ('|') и, следовательно, принадлежит к тому же уровню, что и другие арифметические операторы, а другой - логический оператор ('||'). – m0skit0
Потому что именно так решили разработчики языка. –