如何在 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
后缀对于坚固的代码很重要,因为您要避免对签名类型的意外隐式提升。
我正在尝试获取 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
后缀对于坚固的代码很重要,因为您要避免对签名类型的意外隐式提升。