一.基础位运算
(1)<< 向左位移,eg : 1 << x : 表示1向左位移x位
(2)>> 向右位移,eg : 1 >> x : 表示1向右位移x位
(3)~ 按位取反
(4)& 有0就是0 (按位与)
(5)| 有1就是1(按位或)
(6)^ 相同为0,相异为1 / 无进位相加 (按位异或)
二.确定,修改,某个数中的第x位
-
给一个数n,确定他的二进制表示中的第x位是0还是1?
(n >>x) & 1,若结果为0,则该位置为0,反之为1 -
将一个数n的二进制表示的第x位修改成1
n |= (1<<x) -
将一个数n的二进制表示的第x位修改成0
n &= (~(1<<x))
三.提取,干掉最右侧的1
-
提取一个数(n)二进制表示中最右侧的1
n & -n
tips: -n 从最右侧的1(不包1),左边的区域全部变成相反(-n = ~n +1) -
干掉一个数(n)二进制表示中最右侧的1
n & (n-1)
tips:(n-1)将最右侧的1,右边的区域(包含1)全部变成相反
四.异或(^)运算的运算律
- a ^ 0 = a
- a ^ a = 0
- a ^ b ^ c = a ^(b ^ c)
五.结语
位运算的思想与哈希表有些相似,不过一个是用比特位,一个使用哈希数组