java中按位与运算符(&)对两整数二进制每一位独立执行“与”操作,仅当两对应位均为1时结果为1;如3&5得1;它作用于补码位,适用于奇偶判断、位提取、清零等场景,且不具短路性,区别于逻辑与&&。

Java 中的按位与运算符(&)是对两个整数的**每一位二进制位**独立进行“与”操作,规则很简单:只有两个对应位都为 1,结果该位才是 1;其余情况(0&0、0&1、1&0)结果都是 0。
计算步骤很直接
以 3 & 5 为例:
- 把 3 和 5 转成 32 位补码形式(Java 中 int 是 32 位有符号整数),但只需关注有效位即可:
3 → 0011,5 → 0101(为方便,用 4 位演示) - 逐位对齐运算:
0011
& 0101
——————
0001 - 结果 0001 对应十进制就是 1,所以 3 & 5 == 1
关键细节要注意
Java 中所有整型(byte/short/int/long)参与位运算时,都会先提升为 int(或 long,若含 long 操作数),并以补码形式参与运算。负数也不例外:
- 例如 -1 & 3:-1 的补码是全 1(…11111111),和 3(…00000011)相与,结果仍是 3
- 运算不关心正负,只看二进制位——这是它和逻辑运算符 && 的本质区别
常见实用场景
按位与不是纯理论,日常开发中高频使用:
- 判断奇偶:n & 1 → 结果为 1 是奇数,0 是偶数(因为最低位决定奇偶)
- 提取特定位:比如取低 4 位,就用 n & 0x0F(即 n & 15)
- 清零某些位:如让最后一位变 0(偶数化),可用 n & ~1(~1 是 …11111110)
- 掩码校验:网络中常配合子网掩码做 IP 地址段提取,如 ip & subnetMask
别和逻辑与 && 混了
& 是位运算符,作用于二进制位;而 && 是逻辑运算符,作用于布尔表达式,且具有短路特性。两者类型、语义、用途完全不同:
- a & b:不管 a 是 true 还是 false,b 一定会被计算(无短路)
- a && b:若 a 为 false,则 b 不执行
- 只有当操作数是 boolean 类型时,& 才作为逻辑与(仍无短路);其他类型只能是位运算
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











