对于一个整数n,n&(-n)得到n的最右一个非0位对应的值。
证明:
情况1:若其倒数第一位即为1
*********1(请忽略**的个数,我随便打的)
-n的二进制表述为:
反码********0+1补码为 ********1
******部分由于取反&的结果为0,只有最右边为1,最后结果即为0000001
情况2:若其倒数第x位为1,即
******1000000(x个0)
-n的二进制表述为
反码******0111111(x个1)补码为******1000000
最后结果也为000001000000(1右边有x个0)