В C и C ++ выражение some_num & 0xabcd == 5 будет эффективно оцениваться как some_num & (0xabcd == 5) . Это отличается от всех стандартных арифметических операторов, так как они имеют более высокий приоритет, чем операторы сравнения, поэтому некоторые_NUM + 5 == 5 будут оцениваться, как мы ожидаем.
Почему это? Кажется очень нелогичным, что стандартные арифметические операторы имеют гораздо более высокий приоритет, чем битовые арифметические операторы.
Подробнее здесь: https://stackoverflow.com/questions/796 ... in-c-and-c