java如何操作位
位操作基础概念
Java中的位操作直接对整数类型(byte、short、int、long)的二进制位进行操作。常见的位运算符包括:
&(按位与)|(按位或)^(按位异或)~(按位取反)<<(左移)>>(右移)>>>(无符号右移)
按位与(&)
两个操作数的对应位均为1时,结果位才为1。常用于掩码操作或清零特定位:
int a = 5; // 0101
int b = 3; // 0011
int result = a & b; // 0001 (1)
按位或(|)
两个操作数的对应位有一个为1时,结果位为1。常用于设置特定位:
int a = 5; // 0101
int b = 3; // 0011
int result = a | b; // 0111 (7)
按位异或(^)
两个操作数的对应位不同时,结果位为1。常用于交换变量或翻转特定位:
int a = 5; // 0101
int b = 3; // 0011
int result = a ^ b; // 0110 (6)
按位取反(~)
对操作数的每一位取反。注意结果与数据类型位数有关:
int a = 5; // 000...0101
int result = ~a; // 111...1010 (-6)
左移(<<)
将二进制位向左移动指定位数,低位补0。左移n位相当于乘以2^n:
int a = 5; // 0101
int result = a << 2; // 10100 (20)
右移(>>)
将二进制位向右移动指定位数,高位补符号位。右移n位相当于除以2^n:
int a = -8; // 111...1000
int result = a >> 2; // 111...1110 (-2)
无符号右移(>>>)
将二进制位向右移动指定位数,高位补0。适用于非负数或需要逻辑右移的场景:
int a = -8; // 111...1000
int result = a >>> 2; // 001...1110 (1073741822)
常见应用场景
检查特定位是否为1
int flags = 0b1010;
boolean isSecondBitSet = (flags & 0b0010) != 0;
设置特定位为1
int flags = 0b1010;
flags |= 0b0100; // 结果为0b1110
清除特定位
int flags = 0b1010;
flags &= ~0b1000; // 结果为0b0010
交换变量值
int x = 5, y = 3;
x = x ^ y;
y = x ^ y;
x = x ^ y;
快速计算2的幂次方

int powerOfTwo = 1 << n; // 2^n
注意事项
- 位操作优先级较低,建议使用括号明确运算顺序
- 移位操作中,右操作数应小于左操作数的位数(int为32,long为64)
- 无符号右移(>>>)对byte和short会自动提升为int类型
- 位操作可能降低代码可读性,需添加必要注释






