在C ++中将uint8_t与十六进制进行比较

时间:2019-02-28 23:27:16

标签: c++ atmega

假设我有uint8_t bytes[maxBytes];

现在,我想将第一个字节(bytes[0])的低6位与0x3c进行比较。

我试图这样做:

bytes[0] & 0x3f == 0x3c

不幸的是,这没有产生预期的结果。 (即,即使我打印出bytes[0] & 0x3f时,它也总是0x3c,这始终是错误的)

我已经玩了一些,发现了

bytes[0] & 0x00 == 0x00

有时为真,有时为假。 (与bytes[0] & 0x0 == 0x0bytes[0] & 0x00 == 0x0相同)。并非总是如此吗?

这是怎么回事?我如何进行0x3c比较?

Sitenote:我正在带有atmega328pb MCU的arduino上运行此代码。

1 个答案:

答案 0 :(得分:5)

您需要括号:

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

这是因为&|的奇怪优先级是从C继承而来的,它们是从B继承的(Dennis Ritchie在https://www.bell-labs.com/usr/dmr/www/chist.html中描述了此优先级问题)。 >