ПК-линт прав. Предполагая, что var
является целочисленной переменной, выражение var & 0x02
может принимать два значения: 0
и 2
. Оно никогда не будет равно 1
, что и проверяется оператором if
.
Чтобы расширить это, оператор равенства применяется к двум целочисленным значениям. Важно то, оценивают ли оба операнда одно и то же число, а не то, являются ли они одновременно «истинными» или «ложными».
Чтобы проверить, установлен ли бит 1, можно использовать:
if (variable & 0x02) {
...
}
Учитывая, что ваш компилятор ведет себя так, как вы говорите, он явно несовместим. Тем не менее, он почти наверняка будет правильно обрабатывать if (variable & 0x02)
. Я бы порекомендовал исправить код, чтобы он не сломался, если бы вы когда-нибудь меняли компиляторы.
Наконец, ситуация отличается, если: (1) код - C ++, а не C; и (2) variable
является экземпляром класса; и (3) класс перегружает рассматриваемые операторы. В этом случае поведение сводится к тому, что фактически делают перегруженные операторы.