能否使用掩码的XOR运算而非对掩码取反来修改第i位比特?
关于使用XOR运算修改指定位比特的解答
可以通过搭配掩码的XOR运算直接修改第i位比特,无需对掩码执行取反(~)操作,该方案适用于「翻转指定位」的场景,你给出的Java代码是完全正确的实现:
public class xor { public static void main(String[] args) { int n = 46; int i = 2; int mask = 1<<i; System.out.println(n^mask); } }
这段代码的运行逻辑是:
- 生成掩码
mask = 1 << i,得到仅第i位为1、其余所有位为0的数值 - 原数n和mask做XOR运算时,仅第i位会和1运算发生翻转(0变1、1变0),其余位和0运算保持原值不变,最终得到仅修改了第i位的结果
你可以根据自己的实际修改需求选择不同的位操作方案,仅特定场景需要用到掩码取反:
- 翻转第i位(切换指定位状态):
n ^ (1 << i),无需取反操作 - 强制将第i位设为1:
n | (1 << i),无需取反操作 - 强制将第i位设为0:该场景才需要对掩码取反,实现为
n & (~(1 << i))
内容的提问来源于stack exchange,提问作者Sourabh Rananaware
相关产品推荐
相关产品推荐

