为什么 x & (-x) 可以获取到二进制中最右边的 1,且其它位设置为 0。
x & (-x)
其中-x和~x是两会事儿
-x = ~x+1
上面的图显而易见成功的完成了为什么 x & (-x) 可以获取到二进制中最右边的 1,且其它位设置为 0的任务。
判断是否为 2 的幂的关键是:判断 x & (-x) == x。
为什么 x & (x - 1) 可以将最右边的 1 设置为 0。
(x - 1) 代表了将 x 最右边的 1 设置为 0,并且将较低位设置为 1。
再使用与运算:则 x 最右边的 1 和就会被设置为 0,因为 1 & 0 = 0。