算法基础课:位运算


位运算

两个常用的位运算

  • 第k位是几
  • 最后一位1是哪一位

1 第k位是几

算法

将x右移k位,再与上1

C++实现

int x;
cout<< (x >> k & 1);  // 右移k为与上1

2 最后一位 1:lowbit(x)

算法

将 x 取反后加1,则只有其最后一位 1的位置,会被进位置回 1

再将x & ~x + 1,即 x & -x

c++实现

int lowbit(x) {
    return x & -x; // -x即x的补码,即 x 取反加 1
}