位运算符
含义 | 运算符 | 说明 | 示例 |
左移 | << | 相当于十进制的*2 | 0011=>0110(3*2=6) |
右移 | >> | 相当于十进制的//2 | 0110=>0011(6//2=3) |
按位或 | | | 有一位为1则为1 |
0 0 1 1 1 0 1 1 1 0 1 1 |
按位与 | & | 两位都为1才为1 |
0 0 1 1 1 0 1 1 0 0 1 1 |
按位取反 | ~ |
0 0 1 1 1 1 0 0 |
|
按位异或 | ^ | 相同为0 不同为1 |
0 0 1 1 1 0 0 0 1 0 1 1 |
XOR-异或
相同为0,不同为1。
异或的四大定律
- 恒等率
- 归零率
- 交换律
- 集合率
恒等率
一个数和0做XOR运算等于本身
a⊕0 = a
归零率
一个数和其本身做XOR运算等于0
a⊕a = 0
交换率和结合率一起使用
a⊕b⊕a = (a⊕a)⊕b = 0⊕b = b
实战常用技巧
判断奇偶性
- x % 2 == 1 --> (x & 1) == 1
- x % 2 == 0 --> (x & 1) == 0
取两个数的平均值(二分常用)
- mid = (left + right) // 2 --> (left + right) >> 1
把最低位的1 置为0
- x & (x - 1)
得到最低位的1
- x & - x