x % 2^n
等价于:
x & 2^n-1
即:
一个数模除2的n次方,等于这个数位与2的n次方减一
eg:
int a=5;
5%1 等价于 5 & 0
5%2 等价于 5&1
5%4 等价于 5&3
5%8 等价于 5&7
5%16 等价于 5&15
5%32 等价于 5&31
5%64 等价于 5&63
………
另外取一个数后n位可用这个数& 2^n-1
eg:
int b=13687;
取b后1位 b&1
取b后2位 b&3
取b后3位 b&7
取b后4位 b&15
取b后5位 b&31
取b后6位 b&63
取b后7位 b&127
取b后8位 b&255
……
// 计算x模除2的n次方,使用位运算实现
int modPowerOfTwo(int x, int n) {
return x & ((1 << n) - 1);
}
// 获取一个数的后n位,使用位运算实现
int getLastNBits(int num, int n) {
return num & ((1 << n) - 1);
}