java中biginteger不支持原生位运算符,但提供and、or、xor、not等方法实现等价功能,所有操作返回新对象且保持不可变性。

Java 中 BigInteger 本身不直接支持 &、|、^、~ 这类原生位运算符(因为它是引用类型,且设计上避免重载操作符),但提供了功能等价的实例方法,用法清晰、安全,适用于任意精度整数的位操作。
and、or、xor:对应逻辑与、或、异或
这三个方法都接收一个 BigInteger 参数,返回新的 BigInteger 结果,原对象不变(不可变性)。
-
big1.and(big2)→ 按位与(AND),相当于big1 & big2 -
big1.or(big2)→ 按位或(OR),相当于big1 | big2 -
big1.xor(big2)→ 按位异或(XOR),相当于big1 ^ big2
例如:
BigInteger a = new BigInteger("10"); // 十进制 10 → 二进制 1010
BigInteger b = new BigInteger("12"); // 十进制 12 → 二进制 1100
System.out.println(a.and(b)); // 8 → 1000
System.out.println(a.or(b)); // 14 → 1110
System.out.println(a.xor(b)); // 6 → 0110
not:按位取反(补码表示下的翻转)
not() 是无参方法,对当前数执行按位取反。注意:BigInteger 使用二进制补码表示,not() 等价于 -x - 1(即数学上的负数减一),不是简单翻转所有位(因位数无限,实际是“无限高位补1”后的补码取反)。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
BigInteger.ONE.not()→-2(因为 ~1 = -2) -
BigInteger.ZERO.not()→-1(因为 ~0 = -1) - 若需“仅翻转低 N 位”,应先用
and(mask)截断,再not(),最后再and(mask)保持位宽
其他常用位操作辅助方法
除了四大基本运算,BigInteger 还提供更实用的位级操作:
-
testBit(int n):测试第n位(从 0 开始,最低位)是否为 1,返回boolean -
setBit(int n):将第n位设为 1,返回新对象 -
clearBit(int n):将第n位设为 0 -
flipBit(int n):翻转第n位(0↔1) -
shiftLeft(int n)/shiftRight(int n):左/右移n位(算术右移,符号位扩展)
例如判断并修改特定位:
BigInteger x = new BigInteger("5"); // 101
System.out.println(x.testBit(0)); // true(最低位是1)
System.out.println(x.setBit(2)); // 7(101 → 111)
System.out.println(x.flipBit(1)); // 7(101 → 111,第1位由0变1)
注意事项和常见误区
使用时需留意以下几点,避免隐含错误:
- 所有位运算方法均返回新对象,原
BigInteger不变(不可变类) - 负数参与位运算时,按补码规则处理,结果符合 Java 整数语义(如
BigInteger.valueOf(-1).and(BigInteger.ONE)得1) - 没有
&&/||短路逻辑运算——那是布尔逻辑,BigInteger的and/or/xor始终是完整位运算 - 不要尝试用
~运算符作用于BigInteger变量——编译报错;必须用.not()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










