解釋代碼(n&(n-1))==0的具體含義

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

相關文章
相關標籤/搜索