如何用位运算简便修改指定位?含8位数据实操场景
位运算修改指定位的实现方法
问题场景
给定三个8位布尔变量:
wAsIs = 0b11001100 // 当前数据 wModified = 0b00001111 // 指定要修改的位(1表示该位需要替换) wInput = 0b10101010 // 提供替换的位数据
需求:将wAsIs中wModified标记为1的位,替换为wInput的对应位,预期结果为0b11001010(即1100 1010)。
通用实现步骤
通过三步位运算即可完成,适用于任意位数的位替换需求:
步骤1:清零目标位
对wAsIs执行按位与运算,操作数是wModified的取反值(~wModified)。这一步会把wAsIs中需要替换的位(即wModified为1的位)清零,其他位保持不变。
示例计算:0b11001100 & ~0b00001111 = 0b11001100 & 0b11110000 = 0b11000000步骤2:提取输入的目标位
对wInput执行按位与运算,操作数是wModified。这一步会只保留wInput中需要替换的位,其他位清零。
示例计算:0b10101010 & 0b00001111 = 0b00001010步骤3:合并结果
将前两步的结果执行按位或运算,把清零的位替换成wInput的对应位,最终得到修改后的数据。
示例计算:0b11000000 | 0b00001010 = 0b11001010
一行式简化写法
可以把三步合并为一行代码:
wResult = (wAsIs & ~wModified) | (wInput & wModified);
内容的提问来源于stack exchange,提问作者Teddy
相关产品推荐
相关产品推荐

