Может ли этот оператор C / C ++ if () когда-либо оценить значение ИСТИНА?

Согласно PC-lint , следующий оператор никогда не будет ИСТИНА :

if((variable & 0x02) == 1)

Я использую компилятор C для встроенных систем, который оценивает его как ИСТИНА всякий раз, когда установлен соответствующий бит в переменной . Я предполагаю, что компилятор выполняет сравнение ИСТИНА / ЛОЖЬ обеих сторон == вместо сравнения полученных чисел. Другими словами, каждый раз, когда выражение (varable & 0x02) не равно нулю (то есть ИСТИНА ), выражение также будет ИСТИНА , поскольку значение 1 также ИСТИНА (не ноль).

Я не знаю, четко ли стандарты C / C ++ определяют, как компилятор должен вести себя в этом случае. Есть ли какие-нибудь эксперты C / C ++ , которые могут ответить на этот вопрос на основе того, что говорят стандарты (например, C90, C99, и т. Д.)?

PS: В заявлении выше «переменная» - это беззнаковый символ.

5
задан Paraense 11 November 2011 в 08:51
поделиться