1、基础位运算
<< :左移
>> :右移
~ :取反
& :有0就是0
| :有1就是1
^ :相同为零,相异为1 / 无进位相加
2、给一个数N,确定他的二进制第X位是0还是1
解法:根据 & 运算,先把N右移(>>)X位,然后 & 1 ,即可得出结果。
3、将一个数N的二进制表示的第X位修改成1
解法:根据 | 运算,先把1左移(<<)X位,然后 | N,即可得出结果。
4、将一个数N的二进制表示的第X位修改成0
解法:根据 & 运算,先将1左移(<<)X位,然后取反, 然后 & N,即可得出结果。
5、位图思想
本质就是一个哈希表,每一个槽位都是一个比特位,用0/1表示数据。
6、提取一个数N二进制表示最右侧的1(lowbit)
解法:
N & -N
原理:-N 表示N按位取反+1,此时最右侧的1把N分成两个部分,右侧不变,左侧相反。
7、干掉一个数N二进制表示最右侧的1
解法:N & (N - 1)
原理:
N - 1需要向前借位,找到最右侧的1后,以最右侧的1为分界(包含),右侧相反,左侧不变。
8、位运算优先级
能加括号加括号。
9、异或(^)运算的运算律
本质就是消消乐: