C语言如何设置uint32_t变量的24、25、26位且不干扰其他位
C语言uint32_t指定位赋值实现
核心原理
对指定位段赋值需要两步操作,全程不会修改其他位:
- 先将目标位段的原有值清零,保留其他位原值
- 将输入值移位到目标位段的位置,写入清零后的变量
具体实现
基础常量说明
我们需要操作第24、25、26共3位,因此:
- 位段偏移量:
24,即目标位段的最低位位置 - 位段掩码:
0x7U << 24,对应二进制第24~26位为1、其余位为0,加U标记为无符号常量避免移位异常
赋值代码
#include <stdint.h> // 入参说明: // - `data`: 要修改的原始uint32_t变量 // - `input`: 用户输入的uint8_t值,保证为3或4 uint32_t set_target_bits(uint32_t data, uint8_t input) { // 第一步:清零目标位段 data &= ~(0x7U << 24); // 第二步:写入输入值 data |= ((uint32_t)input << 24); return data; }
效果验证
- 输入值为3(二进制
011):写入后第24、25位为1,第26位为0,对应位段值为0x3000000 - 输入值为4(二进制
100):写入后第26位为1,第24、25位为0,对应位段值为0x4000000
内容的提问来源于stack exchange,提问作者Red Gundu
相关产品推荐
相关产品推荐

