对于任意整数 x,令x=x&(x−1),该运算将 x 的二进制表示的最后一个 1 变成 0。因此,对 xx重复该操作,直到 x 变成 0,则操作次数即为 x 的「一比特数」。
如果正整数 y 是 2 的整数次幂,则 y 的二进制表示中只有最高位是 1,其余都是 0,因此 y&(y−1)=0。
x 除以 2 的余数可以通过 x&1 得到
^= 1可以0/1之前切换
n&(n - 1)结果恰为把 nn的二进制位中的最低位的 1 变为 0 之后的结果。