7 - 位运算
准备春招,算法题冲冲冲!
位运算
基本运算
与 或 非 异或
AND OR NOT XNOR
其中,有关异或运算有个原理: 0 ^ n => n,n ^ n => 0,使用这个原理可以快速找到 136. 只出现一次的数字 - 力扣(LeetCode)。
右移
a >> k,等价于
左移
a << k, 等价于
常用操作
看a二进制的k位数字
- 先把第 k 位移到最后一位,即
n >> k
。 - 看个位是几,即
x & 1
。
二者综合起来如下:
// 看13的十位数的二进制数字
int a = 13;
cout << (a >> 2 & 1); //1
lowbit运算
lowbit (n)
定义为非负整数 n 在二进制表示下 “ 最低位的 1 及其后面的所有的 0 ” 的二进制构成的数值。
lowbit: (a) & (-a)
其中,-a = ~a + 1 。
练习题
- 【异或】136. 只出现一次的数字 - 力扣(LeetCode)
- 【lowbit】801. 二进制中1的个数 - AcWing题库
参考资料
- 算法基础课 - AcWing