Не помню, писал об этом или нет, но написать ещё раз -- лишним не будет.
Почему я повесил на работе рядом со столом таблицу приоритетов операций в Си/Си++? Потому что не все они очевидны -- и я на этом накалывался.
Главный прикол для меня -- это битовые операции. Например, проверим, чему равен последний бит числа:
if(a&0x1==1)
//если последний бит числа установлен, то сделать что-либо
Как бы не так. Битовые операции имеют приоритет НИЖЕ, чем сравнение. Видимо, считается, что они являются аналогами обычных логических операций, таких как &&, однако это не так. Битовые операции ближе к арифметическим. А арифметические выше, чем сравнения. Противоречие.
Как же выполняется это условие?
if(a&(1==1))
//...
Вот так. По чудесному стечению обстоятельств эта конструкция будет работать. Но если бы мы, к примеру, проверяли предпоследний бит, нас бы ждал сюрприз.
Ну что, Minoru, помог бы мне твой -Wall?