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