一、常见位运算
按位与 | & | 有0为0 |
按位或 | | | 有1为1 |
按位异或 | ^ | 相同为0,相异为一 \ 无进位相加 |
按位取反 | ~ | 每个二进制位的0变成1,1变成0 |
左移操作符 | << | 向左移动n个二进制位,右边补0 |
右移操作符 | >> | 向右移动n个二进制位,左边补符号位 |
二、位运算优先级
本着一条原则:能加括号就加括号,别给自己找麻烦
三、给一个数n,确定它的二进制的第x位是0还是1
我们要默认最低位的二进制位的下标为0
公式 | (n >> x) & 1 | 结果为0,第x位就是0 结果为1,第x为就是1 |
四、将一个数n的二进制的第x位修改为1
公式 | n |= (1 << x) |
五、将一个数n的二进制的第x位修改为0
公式 | n &= ( ~(1 << x) ) |
六、提取二进制数最右侧的1
公式 | n & -n |
七、去除二进制数最右侧的1
公式 | n & (n - 1) |
八、异或运算( ^ )
a ^ 0 = a |
a ^ a = 0 |
a ^ b ^ c = b ^ c ^ a (符合交换律) |