2010-06-20 57 views

回答

6

在補充現有的答案,這是爲什麼數字x是形式0b00000(零)或0b0111..11(全部最低的位數設置,這些都爲N 2^n-1和數字不是一個簡短的說明> 0)沒有財產x&(x+1) == 0

對於具有以下形式0b????1000..00的數xx+1具有相同的位數爲除了至少顯著位x,所以x & (x+1)具有至少一個比特組,其被顯示爲在x被設置該位。通過短解釋道:

x  0b????1000..00 
x+1  0b????1000..01 
x&(x+1) 0b????10000000 

對於形式0b????10111..11的數量x

x  0b????10111..11 
x+1  0b????110000000 
x&(x+1) 0b????10000..00 

總之,如果x不爲零或寫成二進制所有最低的位數設置,然後x&(x+1)不是零。

+2

+1因爲雙方的解釋都很重要! – psmears 2010-06-20 20:58:57

7

2^n-1的一個數字將具有所有的比特到第n位集。例如,2^3-1(7):

0b0111 

如果再加上一到這一點,我們得到8:

0b1000 

然後,執行位和,我們看到,我們得到零,因爲沒有位在兩個數字中都設置爲開。如果我們以非2^n+1的格式開頭,那麼結果將爲非零。

+0

我想你的意思是'2^n-1'開頭 – 2010-06-20 19:08:54

+0

@邁克爾:很對。謝謝。 – 2010-06-20 19:10:47

+0

謝謝大家 – 2010-06-20 19:29:57

5

零。如果X是2^N-1,則它是一個二進制1的連續字符串。另外一個是1,後跟一個與X相同長度的零串,所以這兩個數字在任何位置都沒有共同的1位,所以兩者的AND爲零。

相關問題