位运算常见操作
判断奇偶
-
(x & 1) == 1
==x % 2 == 1
判断奇数 -
(x & 1) == 0
==x % 2 == 0
判断偶数
位运算除法
x / 2
== x >> 1
>>>
为无符号右移,高位补0。>>
为有符号右移,正数高位补0,负数高位补1。
获取二进制最右边的 1 :x & (-x)
- 求补码的方式:按位取反加1
- 取完补码之后,可以看出,结果是最右边的 1 不动,然后其他所有位都按位取反。
- 要清楚,计算机计算负数的时候,会求其补码,正数的补码是自己本身,负数的补码就是上面的求法,这样互为相反数的两个补码进行
&
,就会得到最后一位 1 ,其前面和后面的1都会被过滤掉,后面的0会保留,形成新的二进制数。
将二进制最右边的 1 去掉: x & (x - 1)
- 首先要了解
x - 1
会发生什么,从二进制的角度,这会影响最后的1以后的数位,前面不会影响。然后 -1 之后,最右边的 1 变成 0,后面的0都会变成 1。 - 然后
&
操作,结果上就是把 最右边的 1 去掉。