【问题标题】:Compare uint8_t with hexadecimal in C++将 uint8_t 与 C++ 中的十六进制进行比较
【发布时间】:2019-02-28 23:27:16
【问题描述】:

假设我有uint8_t bytes[maxBytes];

现在我想将第一个字节的低 6 位 (bytes[0]) 与 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 上运行此代码。

【问题讨论】:

标签: c++ atmega


【解决方案1】:

你需要括号:

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

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

【讨论】:

    猜你喜欢
    • 2021-08-26
    • 2011-10-16
    • 2016-01-08
    • 2014-08-12
    • 1970-01-01
    • 2019-07-24
    • 2013-05-24
    • 1970-01-01
    • 2018-09-03
    相关资源
    最近更新 更多