表达式:x & (-x)的含义

表达式:x & (-x)的含义:

返回x在二进制下的最右边的1表示的值:

  • 如果x是偶数,返回值能整除x且该值一定是2的n次幂,即能整除x的最大的2的n次幂
  • 如果x是奇数,返回值一定是1.

解析:

根源在于计算机中表示负数的机制,即补码。

补码 = 原码取反 + 1

原码:x = b0000’0100

反码:~x = b1111’1011

补码:-x = ~x + 1 = b1111’1100

如果x是偶数,取反末位为1,+1会发生进位,最终最右边的1及后面的0与原码一致。

如果x是奇数,取反后末位为0,+1不会发生进位,最终只有最末位于原码一致,

Comments