java位运算本质是对整数补码逐位逻辑操作:&全1得1,|有1得1;运算前自动提升为int(long除外),严格对齐补码,无短路,结果类型与操作数一致。

Java 位运算符的底层计算,本质就是对整数在内存中的二进制补码表示,逐位进行逻辑操作。不涉及任何高级语义,纯粹是 CPU 级别的“0 和 1”比对。
按位与(&):全 1 才得 1
两个操作数对应位都为 1,结果该位才是 1;其余情况(1&0、0&1、0&0)结果均为 0。
例如:3 & 5
- 3 的二进制(32 位补码):…0000 0011
- 5 的二进制(32 位补码):…0000 0101
- 逐位与:…0000 0001 → 十进制为 1
注意:负数参与运算时,用的是其补码形式。比如 -1 & 3,-1 的补码是全 1(…1111 1111),与 3(…0000 0011)相与,结果仍是 3。
按位或(|):有 1 就得 1
只要两个操作数中某一位至少有一个是 1,结果该位就是 1;仅当两位都是 0 时,结果才为 0。
例如:3 | 5
- 3:…0000 0011
- 5:…0000 0101
- 逐位或:…0000 0111 → 十进制为 7
典型用途:给某些位置 1。如把 int x 的低 4 位全设为 1,可写 x | 0x0F(即 x | 15)。
关键细节不能忽略
• Java 中所有整型(byte/short/int/long)参与位运算时,会先**自动提升为 int**(除非明确是 long,用 L 后缀),再按补码进行运算。
• 运算过程严格按位对齐,高位不足补 0(正数)或补 1(负数补码的符号扩展)。
• 没有短路行为 —— & 和 | 总是计算左右两个操作数,这点和逻辑运算符 &&、|| 有本质区别。
• 位运算结果类型取决于操作数类型:int & int → int;long | long → long。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











