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

问题描述 投票:3回答:1

假设我有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:我在arduino w / atmega328pb MCU上运行此代码。

c++ atmega
1个回答
5
投票

你需要括号:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.