1. &
同1取1
0 & 0 = 0
1 & 0 = 0
0 & 1 = 0
1 & 1 = 1
x & 0 = 0 // 清零 0
x & 1 = x // 取位 (x 为二进制下的 某一位)
取位, 清零,判定奇偶
1) n & 1 // 判断奇偶性
2) n & (n - 1) // 去除最低位 1 用途:求 1 的个数, 判断是否为 2 的整数次幂
3) n & -n // lowbit 取出最低位 1 00...
4) n >> k & 1 // 取出 n 的第 k 位
5)n & ((1 << k) - 1) // 取出前 k 位
6) n & (~(1 << k)) // 清零第 k 位
2. |
同0取0
0 | 0 = 0
1 | 0 = 1
0 | 1 = 1
1 | 1 = 1
x | 1 = 1 // 赋值 1
赋值 1,
1) n | 1 << k // 赋值 n 的第 k 位为 1
2)
3. ~
取反 : ~0 = 1; ~1 = 0
4. ^
同0异1 : 0 ^ 0 = 0; 0 ^ 1 = 1; 1 ^ 0 = 1; 1 ^ 1 = 1
0 ^ 0 = 0
1 ^ 0 = 1
1 ^ 1 = 0
0 ^ 1 = 1
x ^ 0 = x // 原位
x ^ 1 = ~x // 取反
性质 :
a ^ a = 0 ;
a ^ 0 = a ;
a ^ b = b ^ a ;
a ^ b ^ c = (a ^ b) ^ c = a ^ (b ^ c) ;
a ^ b ^ a = b ;
应用 : 取反,
1) n ^ 1 // 取反 n 的最低位
2) n ^ 1 << k // 取反 n 的第 k 位
2)
5. << 和 >>
2 次幂 相关
1)1 << n // 2 的 n 次幂
2) n << k // n * (2 的 k 次幂), 最低位后面 添 0
3) n << k + 1 // 最低位后面 添 1
4) n >> k // n / (2 的 k 次幂), 去除最低位
7. 技巧
n >> k & 1 // 取出整数 n 在二进制下的第 k 位
n & ((1 << k) - 1) // 取出整数 n 在二进制下的前 k 位
n ^ 1 << k // 把整数 n 在二进制下的第 k 位取反
n | 1 << k // 对整数 n 在二进制下的第 k 位赋值 1
n & (~(1 << k)) // 对整数 n 在二进制下的第 k 位赋值 0