在C/C++中如何无需循环修改二进制数的指定位置位值?
不使用循环修改整数指定二进制位的方案
不需要用到循环,仅靠基础位运算即可实现,默认规则为二进制最低位(最右侧)对应position=0,若你使用的位序号从1开始,传入参数前先将position减1即可。
将指定position位设为1
使用按位或运算实现,构造仅position位为1、其余位均为0的掩码,与原数做或运算即可:
- 运算公式:
x | (1 << position) - 示例:x=5(二进制
101),要将position=1的位设为1,掩码为1<<1=2(二进制010),运算结果为101 | 010 = 111(十进制7),对应位修改完成。
将指定position位设为0
使用按位与运算实现,构造仅position位为0、其余位均为1的掩码,与原数做与运算即可:
- 运算公式:
x & (~(1 << position)) - 示例:x=7(二进制
111),要将position=1的位设为0,掩码为~(1<<1)(二进制表示为全1序列仅第1位为0),运算结果为111 & 101 = 101(十进制5),对应位修改完成。
通用修改逻辑(可直接指定要写入的值v,v取值为0或1)
如果需要动态适配写0或写1的需求,可直接使用通用公式,原理为先将目标位清零,再写入指定值:
- 运算公式:
(x & (~(1 << position))) | (v << position)
注意事项
- 部分编程语言中对有符号整数做左移位可能触发符号位扩展异常,建议使用无符号整数类型执行位操作
- 注意确认你使用的位序号规则,避免position偏移1位导致修改错误
内容的提问来源于stack exchange,提问作者royan maeri
相关产品推荐
相关产品推荐

