blog/content/post/算法题/位运算操作.md
2025-09-06 01:58:40 +08:00

1.6 KiB
Raw Blame History

title description date lastmod slug categories tags math
位运算常用操作归纳 位运算常用操作归纳 2025-09-06T01:37:00+08:00 2025-09-06T01:37:00+08:00 位运算操作
算法题
位运算
动态规划
true

下面的第k位是从0开始计数的。

位运算 解释
lowbit(i)i & -i 返回i的最后一位1以及后面的0
(n >> k) & 1 求n的第k位数字
x | (1 << k) 将x第k位置为1
x & ~(1 << k) 将x第k位置为0
x ^ (1 << k) 将x第k位取反
x & (x - 1) 将x最右边的1置为0 (去掉最右边的1)
x | (x + 1) 将x最右边的0置为1
x & 1 取x的最后一位。用于判断x的奇偶性1为奇0为偶
(n > 0) && ((n & (n - 1)) == 0) 判断n是否为2的幂。因为2的幂的二进制只有一个1用n & (n-1)可以直接把它唯一的1去掉变成0。
n & ((1 << k) - 1) 等价于 n % (1 << k),即n对$2^k$取模
a ^= b; b ^= a; a ^= b; 交换a和b的值
~n 对n按位取反结果为-n-1

统计二进制数中1的个数

int countOnes(int n) {
    int count = 0;
    while (n) {
        n &= (n - 1); // 即 n = n & (n - 1)
        count++;
    }
    return count;
}