Согласно PC-lint , следующий оператор никогда не будет ИСТИНА
:
if((variable & 0x02) == 1)
Я использую компилятор C для встроенных систем, который оценивает его как ИСТИНА
всякий раз, когда установлен соответствующий бит в переменной
. Я предполагаю, что компилятор выполняет сравнение ИСТИНА
/ ЛОЖЬ
обеих сторон ==
вместо сравнения полученных чисел. Другими словами, каждый раз, когда выражение (varable & 0x02)
не равно нулю (то есть ИСТИНА
), выражение также будет ИСТИНА
, поскольку значение 1 также ИСТИНА
(не ноль).
Я не знаю, четко ли стандарты C / C ++
определяют, как компилятор должен вести себя в этом случае. Есть ли какие-нибудь эксперты C / C ++
, которые могут ответить на этот вопрос на основе того, что говорят стандарты (например, C90, C99,
и т. Д.)?
PS: В заявлении выше «переменная» - это беззнаковый символ.