今天看啥  ›  专栏  ›  眼若繁星丶

常用位运算

眼若繁星丶  · 简书  ·  · 2021-03-21 21:24

位运算常见操作

判断奇偶

  • (x & 1) == 1 == x % 2 == 1 判断奇数
  • (x & 1) == 0 == x % 2 == 0 判断偶数

位运算除法

x / 2 == x >> 1

>>> 为无符号右移,高位补0。 >> 为有符号右移,正数高位补0,负数高位补1。

获取二进制最右边的 1 : x & (-x)

  • 求补码的方式:按位取反加1

-x = \lnot x + 1

  • 取完补码之后,可以看出,结果是最右边的 1 不动,然后其他所有位都按位取反。
  • 要清楚,计算机计算负数的时候,会求其补码,正数的补码是自己本身,负数的补码就是上面的求法,这样互为相反数的两个补码进行 & ,就会得到最后一位 1 ,其前面和后面的1都会被过滤掉,后面的0会保留,形成新的二进制数。

将二进制最右边的 1 去掉: x & (x - 1)

  • 首先要了解 x - 1 会发生什么,从二进制的角度,这会影响最后的1以后的数位,前面不会影响。然后 -1 之后,最右边的 1 变成 0,后面的0都会变成 1。
  • 然后 & 操作,结果上就是把 最右边的 1 去掉。




原文地址:访问原文地址
快照地址: 访问文章快照