假设我有uint8_t bytes[maxBytes];
。
现在,我想将第一个字节(bytes[0]
)的低6位与0x3c
进行比较。
我试图这样做:
bytes[0] & 0x3f == 0x3c
不幸的是,这没有产生预期的结果。 (即,即使我打印出bytes[0] & 0x3f
时,它也总是0x3c
,这始终是错误的)
我已经玩了一些,发现了
bytes[0] & 0x00 == 0x00
有时为真,有时为假。 (与bytes[0] & 0x0 == 0x0
和bytes[0] & 0x00 == 0x0
相同)。并非总是如此吗?
这是怎么回事?我如何进行0x3c
比较?
Sitenote:我正在带有atmega328pb MCU的arduino上运行此代码。
答案 0 :(得分:5)
您需要括号:
(bytes[0] & 0x3f) == 0x3c
这是因为&
和|
的奇怪优先级是从C继承而来的,它们是从B继承的(Dennis Ritchie在https://www.bell-labs.com/usr/dmr/www/chist.html中描述了此优先级问题)。 >