跳到主要内容
信息
· 文章中可能会出现一些错误,希望大佬们可以在评论区指出;

7 - 位运算

准备春招,算法题冲冲冲!

位运算​

基本运算​

与 或 非 异或​

AND OR NOT XNOR

其中,有关异或运算有个原理: 0 ^ n => n,n ^ n => 0,使用这个原理可以快速找到 136. 只出现一次的数字 - 力扣(LeetCode)。

右移​

a >> k,等价于 a2k\dfrac{a}{2^k}。

左移​

a << k, 等价于 a×2k a\times2^k 。

常用操作​

看a二进制的k位数字​

  1. 先把第 k 位移到最后一位,即 n >> k。
  2. 看个位是几,即 x & 1。

二者综合起来如下:

// 看13的十位数的二进制数字
int a = 13;
cout << (a >> 2 & 1); //1

lowbit运算​

lowbit (n) 定义为非负整数 n 在二进制表示下 “ 最低位的 1 及其后面的所有的 0 ” 的二进制构成的数值。

lowbit: (a) & (-a)

其中,-a = ~a + 1 。

练习题​

参考资料​