Java位与(&)运算与使用场景

633 阅读1分钟

运算规则:

1 & 1 = 1
1 & 0 = 0
0 & 0 = 0

样例说明:

定义int a = 6, b = 10,二进制转换:
6 ->  00000110
10 -> 00001010
a & b = 00000010 -> 2

使用场景:

判断奇偶数

int r = num & 1;
r = 0, num为偶数;
r = 1, num 为奇数;

分析:数字1转换为二进制时,高位全部为0,根据运算规则,前31位全部为0,num的最后一位1,则运算结果为1。

取余

b的值为2的N次幂时:
a % b = a & (b-1) 

举例:
4 -> 0100
3 -> 0011

余数的定义是整除后被除数未除尽的部分,且余数的取值范围 [0, 除数-1]2的幂在二进制中有一个特点,只存在一个1的位,其余都是0。
以2的幂的二进制的角度来看,余数的范围是 [0, 2的幂-1],
二进制表现余数最大值为:2的幂的二进制中的高位1置为0,高位右侧全置为1。
所以计算2的幂的余数也就是求出数字在高位1右侧的值。

判断2的N次幂

int r = num & (num-1)
r = 0,num为2的N次幂