java位运算直接操作整数的二进制补码(char除外,用原码),包括&、|、^、~、>>、>>>六种,仅支持整型,操作数自动提升,位移量按位宽取低5或6位。

Java 中位运算符直接作用于整数的二进制补码表示,对每一位独立运算,不产生进位或借位,也不依赖数值大小,只看对应位的 0/1 状态。
位运算操作的是补码,不是原码
Java 的 byte、short、int、long 都以补码形式存储。比如 -5 不是简单在 5 前加符号位,而是先写 5 的二进制(如 8 位:00000101),取反得 11111010,再加 1 得 11111011 —— 这才是 -5 在内存中的真实表示。所有位运算(&、|、^、~、>、>>>)都直接在这个补码上进行。
char 是例外:它虽是整数类型,但无符号,用原码存储,不涉及补码转换。
六种基本运算符的行为要点
&(按位与):同为 1 才得 1,其余为 0。常用于“掩码提取”或“清零”。
例如:0b10110011 & 0b00001111 → 只保留低 4 位,结果为 0b00000011(即 3)。
|(按位或):有 1 就得 1。常用于“置位”或“权限合并”。
例如:READ = 1 (0b0001), WRITE = 2 (0b0010),则 READ | WRITE → 0b0011(即 3),表示同时拥有读写权限。
^(按位异或):位不同得 1,相同得 0;满足 a ^ a == 0 和 a ^ 0 == a。
可用来翻转特定位(如 x ^ 0b00001000 翻转第 4 位),或交换两数(无需临时变量)。
~(按位取反):单目运算,每位 0↔1。注意结果是补码解释值:~5 不是 -5,而是 -6(因 5 的 32 位补码取反后,按补码规则解读为 -6)。
:高位丢弃,低位补 0。左移 n 位 ≈ 乘以 2ⁿ(不溢出时成立)。
例如:6 → <code>0b110 → <code>0b11000 = 24。
>(带符号右移):右移 n 位,高位补符号位(正数补 0,负数补 1),保持符号不变。
例如:-8 >> 1 → 补码 ...11111000 右移 → ...11111100 = -4。
>>(无符号右移):高位一律补 0,结果恒为非负数,不管原数正负。
例如:-1 >>> 1 → 所有位全 1 的补码(即 -1)无符号右移 1 位 → 得到一个很大的正数(2³¹−1)。
使用限制与注意事项
位运算仅支持整型:byte、short、int、long、char。浮点型(float/double)不能参与任何位运算。
操作数会自动提升为 int(除非两个都是 long,则结果为 long)。例如 char 与 int 运算,char 先转为 int 再计算。
位移运算中,若右操作数(位移量) ≥ 类型位宽(如 int 是 32),Java 只取其低 5 位(对 int)或低 6 位(对 long)作为实际位移数。即 5 等价于 <code>5 。
位运算不改变原变量值,必须显式赋值才生效,例如:a = a & mask; 或简写为 a &= mask;。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











