这是一个常用的读取 uint32 数据指定标志位的宏定义:
// 读取第 n 位(n 从 0 开始计数),返回该位的值(0 或 1) #define GET_BIT(value, n) (((value) >> (n)) & 0x01) // 判断第 n 位是否为 1,返回 true/false #define IS_BIT_SET(value, n) (((value) >> (n)) & 0x01) // 示例:读取第10位是否为1 // if (IS_BIT_SET(data, 10)) { ... }如果你希望更语义化一些,也可以写成:
#define BIT_IS_ONE(value, bit_pos) (((value) >> (bit_pos)) & 0x01)使用示例:
uint32_t reg = 0x00000400; // 二进制第10位为1 if (BIT_IS_ONE(reg, 10)) { printf("第10位是1\n"); }注意:
位号
n通常从 0 开始计数,第 0 位是最低位。如果要读第 10 位,传入
n = 10。宏中的参数用括号包裹是为了避免运算符优先级问题。
写一个读取uint32数据标志位的宏定义
比如说返回第10位是否为1
特此记录
anlog
2026.8.29