在求对二的补码时表达式 x &= (x – 1)可鉯删除 x 中最右边值为 1 的
一个二进制位。请解释这样做的道理用这一方法重写 bitcount 函数,以加快其执行速度
此表达式会干掉x最右边的1。
暂时稱&左边的二进制数为1号&右边的二进制数为2号
先来看1号最右位为1的情况:
“&”是按位与,
1号与2号唯一的差别就是最右位
其他位&后结果不變
就相当于把最右边一个1干掉了
1号的最右位是0,发生了借位
然后1号和2号进行&运算:
可以看到1号和2号有两位不同
0&1得0,这两位都被干掉了
无論 x 最右边的数是1还是0
x =& (x-1)都可以把最右边的一个1干掉
写注释真的好恶心啊...( ̄ェ ̄;)