(1)判断奇偶
if (n & 1) // 奇数
else // 偶数
(2) 乘除2的幂
左移等价于乘以2,右移等价于除以2:
判断是否是2的幂
//一个数如果是2的幂,其二进制只有1个1:
bool isPowerOfTwo(int n) {
return n > 0 && (n & (n - 1)) == 0;
}
提取最低位的1
n & -n 可以得到n的最低位1:
int n = 12; // 1100
int low = n & -n; // 0100 (4)
清除最低位的1
n & (n - 1) 将最低位的1变为0:
int n = 12; // 1100
n = n & (n - 1); // 1000 (8)
应用:统计一个数二进制中1的个数:
int countOnes(int n) {
int count = 0;
while (n) {
n &= (n - 1);
count++;
}
return count;
}
检查某位是否为1
使用 1 << k 创建掩码:
int n = 13; // 1101
bool bit2 = n & 1 << k; // 检查n的第k位(从0开始)
设置某位为1
使用按位或:
int n = 8; // 1000
n |= (1 << 2); // 设置第2位为1,结果为12 (1100)
清除某位为0
int n = 13; // 1101
n &= ~(1 << 2); // 清除第2位,结果为9 (1001)
(10) 翻转某位
使用异或:
int n = 13; // 1101
n ^= (1 << 2); // 翻转第2位,结果为9 (1001)