1)(A&B)==0的含义二进制
A和B的二进制表示的同一位置毫不会同为1。
2)n和n-1
若n的最低有效位为1,减去1后为0,其他为均相同,不符合要求。n的最低有效位为0,减去1时,必须向高位借1。
3)(n&(n-1))==0的含义
假设 n = 5,二进制表示为101,那么 n-1 = 4,二进制表示为100, 5 & 4 = 101 & 100 = 100 = 4 != 0,下面咱们来看更多的例子:
5 & 4 = 101 & 100 = 4 6 & 5 = 110 & 101 = 4 7 & 6 = 111 & 110 = 6 8 & 7 = 1000 & 0111 = 0
咱们会发现要使表达式等于0,n-1必须使得n的n-1都向高位进1,也就是说知足一下条件:
x + 1 = n x & n = 0
咱们来看看有那些数能知足要求:
10 & 01 = 0 -------2^1 100 & 011 = 0 -------2^2 1000 & 0111 = 0 -------2^3 10000 & 01111 = 0 -------2^4 。。。。。。
所谓代码((n & (n-1))== 0)的含义是n知足2的n次方
n的最高有效位为1,其他位为0。所以,n的值是2的某次方。
因此,(n&(n-1))==0检查n是否为2的某次方(或者检查n是否为0