运算规则:
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次幂