表达式: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不会发生进位,最终只有最末位于原码一致,