如何在 C 中获取无符号 8 位类型的最高有效位

How to get the most significant bit of an unsigned 8-bit type in C

我正在尝试获取 C 中无符号 8 位类型的最高有效位。

这就是我现在正在尝试做的事情:

uint8_t *var = ...;
...
(*var >> 6) & 1

这样对吗?如果不是,那会是什么?

要从 uint8_t 指针指向的内存中获取最高有效位,您需要移动 7 位。

(*var >> 7) & 1

另一种选择是简单地应用位掩码并检查结果值:

*var & 0x80u // 1000 0000

屏蔽位的最standard/correct 方式是使用形式为1u << bit 的可读位掩码。任何在代码中发现 1u << n 的 C 程序员都会知道它是一个位掩码 - 因此它是自文档化代码。

所以如果你想要第 7 位,你会写

*var & (1u << 7)

u 后缀对于坚固的代码很重要,因为您要避免对签名类型的意外隐式提升。