You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中以编程方式实现数字二进制位翻转?

在Java中通过异或运算实现二进制位翻转

你提到的需求是把数字的二进制位逐位翻转(0变1,1变0),比如6(二进制0110)变成9(二进制1001),用异或运算确实是最直接的方案,核心思路就是让目标数字和对应位数的全1二进制数做异或操作。

原理说明

异或运算的核心规则正好契合位翻转的需求:

  • 1 ^ 0 = 1:原来的0位翻转为1
  • 1 ^ 1 = 0:原来的1位翻转为0
  • 0 ^ 0 = 0:高位补的0翻转后还是0,不会影响有效位的结果

所以只要找到一个和目标数字有效位数一致的全1数,两者异或就能完成位翻转。

具体实现方式

1. 翻转全部32位(Java int类型默认位数)

Java里int是32位有符号整数,~0会生成一个二进制全1的数(对应十进制的-1),直接用它和目标数异或就能翻转所有32位:

int n = 6;
int flipped = n ^ ~0;
System.out.println(flipped); // 输出 -7,对应32位全翻转后的结果

这里要注意,因为Java的int是有符号的,翻转后如果最高位是1,会被解析为负数。如果只需要翻转低N位(比如你例子里的4位有效数),就需要用掩码来限定位数。

2. 翻转指定位数(比如4位、8位)

如果只需要翻转固定的几位,就用对应位数的全1掩码:

  • 4位掩码:0b1111(即十进制15)
  • 8位掩码:0xff(十进制255)
  • 16位掩码:0xffff(十进制65535)

拿你举的例子,6是4位有效二进制数,用4位掩码异或就能得到想要的结果:

int n = 6;
int mask = 0b1111; // 或者直接写15
int flipped = n ^ mask;
System.out.println(flipped); // 输出9,正好是目标结果

3. 动态适配有效位数

如果不知道目标数的有效位数,可以先计算出最高有效位的位置,再生成对应掩码:

int n = 6;
// 计算最高有效位的位置
int highestBit = Integer.highestOneBit(n);
// 生成对应位数的全1掩码
int mask = (highestBit << 1) - 1;
int flipped = n ^ mask;
System.out.println(flipped); // 输出9

这个方法会自动匹配目标数的有效位数,比如n=6(最高位是4,即100),掩码就是1000*2 -1 = 1111,刚好是4位全1。

注意事项

  • Java的long类型是64位,如果处理长整数,要对应使用~0L或者64位的掩码。
  • 有符号整数的最高位是符号位,翻转后可能会改变正负性,如果只关心低N位的翻转,一定要用掩码限定范围。

内容的提问来源于stack exchange,提问作者src3369

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:15:56