XOR - 异或
异或:相同为0,不同为1。也可用二进制的不进位加法来理解。
异或操作的一些特点:
x ^ 0 = x
x ^ 1s = ~x (1s 是 ~0)
x ^ (~x) = 1s
x ^ x = 0
c = a ^ b => a ^ c = b, b ^ c = a 交换两个数
a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c
指定位置的运算符
- 将x最右边的n位清零 : x & (~0 << n)
- 获取x的第n位值(0 或 1) : (x >> n) & 1
- 获取x的第n位的幂 : x & (1 << n)
- 仅将第n位置为1 : x | (1 << n)
- 仅将第n位置为0 : x & (~(1 << n))
- 将x的最高位至第n位(含)清零 : x & ((1 << n) - 1)
实战位运算要点
- 判断奇偶
x % 2 == 1 ——> (x & 1) = 1
x % 2 == 0 ——> (x & 1) = 0
- x >> 1 ——> x / 2
即:x = x / 2 ——> x = x >> 1
- x = x & (x - 1) : 清零最低位的1
- x & -x => 得到最低位的1
- x & ~x = 0