Сравните uint8_t с шестнадцатеричным в C ++ - PullRequest
0 голосов
/ 01 марта 2019

Допустим, у меня есть uint8_t bytes[maxBytes];.

Теперь я хочу сравнить младшие 6 бит первого байта (bytes[0]) с 0x3c.

Я пытался сделать это так:

bytes[0] & 0x3f == 0x3c

К сожалению, это не дало ожидаемого результата.(то есть это всегда ложь, хотя когда я распечатываю bytes[0] & 0x3f, это 0x3c)

Я немного поиграл с этим и обнаружил, что

bytes[0] & 0x00 == 0x00

иногда это правда, а иногда и ложь.(То же самое с bytes[0] & 0x0 == 0x0 и bytes[0] & 0x00 == 0x0).Разве это не всегда должно быть правдой?

Что здесь происходит?Как я могу заставить работать 0x3c сравнения?

Sitenote: я запускаю этот код на Arduino с микроконтроллером atmega328pb.

1 Ответ

0 голосов
/ 01 марта 2019

Вам нужны круглые скобки:

(bytes[0] & 0x3f) == 0x3c

Это из-за странных приоритетов & и |, которые были унаследованы от C, которые унаследовали их от B (Деннис Ритчи описал эту проблему приоритета вhttps://www.bell -labs.com / USR / DMR / WWW / chist.html ).

...