常见的位运算操作(操作对象为正整数时)
1. 按位与(&):
当两个数全为1才为1,否则为0。两个数字做与运算,结果不会变大。
2. 按位或(|):
当两个数中有一个1为1,否则为0。两个数字做或运算,结果不会变小。
3. 按位异或(^):
两个数不同为1,相同为0.两个数字做异或运算,结果可能变大,也可能变小。
异或的性质:
- 交换律:x ^ y = y ^ x
- 结合律:x ^ (y ^ z) = (x ^ y) ^ z
- 自反性:x ^ x = 0
- 零元素:x ^ 0 = x
- 逆运算:x ^ y = z,有z ^ y = x
4. 按位取反(~):
对操作数的每一位进行取反操作,通常用于无符号整数(unsigned int/long long),这是为了避免符号位取反造成的干扰。
5. 按位左移(<<):
对操作数向左移动,低位补0,相当于乘以2的k次幂。
6. 按位右移(>>):
对操作数向右移动,高位补0,相当于除以以2的k次幂。
位运算技巧
- 判断数字奇偶性:x & 1。(为1是奇数,为0是偶数)
- 获取二进制数的某一位:x >> i & 1。
- 修改二进制的某一位为1:x | (1 << i)。
- 判断一个数字是否为2的幂次方:x & (x - 1)。
5.获取二进制位中最低位的1:x & -x。