1. 位运算符
Java中常用的位运算符如下:
2. 详解
(1)按位与 &
- 规则:同一位上全是 1 时,结果为 1,否则为 0。
- 用途:
清零某些位:x & 0xF0
可以保留高 4 位,清除低 4 位
判断奇偶数:n & 1
为 0 表示偶数,为 1 表示奇数
int a = 5; // 0101
int b = 3; // 0011
System.out.println(a & b); // 1 → 0001
(2)按位或 |
- 规则:同一位上只要有一个 1,结果为 1。
- 用途:
设置某些位:x | 0x0F
可以将低 4 位设置为 1。
int a = 5; // 0101
int b = 3; // 0011
System.out.println(a | b); // 7 → 0111
(3)按位异或 ^
- 规则:同一位上相同为 0,不同为 1。
- 用途:
交换两个数:不使用额外的变量,通过异或完成交换。
检测位差异。
int a = 5; // 0101
int b = 3; // 0011
System.out.println(a ^ b); // 6 → 0110// 交换两个数
int x = 5, y = 3;
x = x ^ y;
y = x ^ y;
x = x ^ y;
System.out.println(x); // 3
System.out.println(y); // 5
(4)按位取反 ~
- 规则:0 变 1,1 变 0。
- 用途:
快速计算补码。
int a = 5; // 0101
System.out.println(~a); // -6 → 1010 (补码表示)
(5)左移 <<
- 规则:将所有位向左移动指定位置,右侧用 0 补充。
- 用途:
快速乘以 2 的幂:x << n
相当于x * 2^n
。
int a = 5; // 0101
System.out.println(a << 1); // 10 → 1010
(6)右移(带符号) >>
- 规则:将所有位向右移动指定位置,高位根据符号位补充(正数补 0,负数补 1)。
- 用途:
快速除以 2 的幂:x >> n
相当于x / 2^n
。
int a = 5; // 0101
System.out.println(a >> 1); // 2 → 0010
(7)右移(无符号) >>
- 规则:将所有位向右移动,高位始终补 0,忽略符号位。
- 用途:
用于无符号数的右移操作。
int a = -5; // 补码表示为:11111111111111111111111111111011
System.out.println(a >>> 1); // 2147483645 → 高位补 0