回答
在補充現有的答案,這是爲什麼數字x
是形式0b00000
(零)或0b0111..11
(全部最低的位數設置,這些都爲N 2^n-1和數字不是一個簡短的說明> 0)沒有財產x&(x+1) == 0
。
對於具有以下形式0b????1000..00
的數x
,x+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^n-1
的一個數字將具有所有的比特到第n位集。例如,2^3-1
(7):
0b0111
如果再加上一到這一點,我們得到8:
0b1000
然後,執行位和,我們看到,我們得到零,因爲沒有位在兩個數字中都設置爲開。如果我們以非2^n+1
的格式開頭,那麼結果將爲非零。
我想你的意思是'2^n-1'開頭 – 2010-06-20 19:08:54
@邁克爾:很對。謝謝。 – 2010-06-20 19:10:47
謝謝大家 – 2010-06-20 19:29:57
零。如果X是2^N-1,則它是一個二進制1的連續字符串。另外一個是1,後跟一個與X相同長度的零串,所以這兩個數字在任何位置都沒有共同的1位,所以兩者的AND爲零。
- 1. 如何在32位處理器上使用一個有符號整數和一個無符號整數製作帶符號的64位整數
- 2. 帶符號和無符號整數的位操作問題,XNOR
- 3. 如何使用無符號整數來表示一個集合?
- 4. 用兩個無符號的16位整數表示一個無符號的32位值
- 5. 有符號整數的按位操作
- 6. 如何使用正則表達式來確定一個無號數是否可以被5整除?
- 7. Lambda表達式「贊」操作符可用?
- 8. C++:在一個有符號的64位整數中的兩個無符號64位整數的差異
- 9. mod_rewrite如果你在整個地方使用表達式,你可以把它放在一個「變量」中嗎?
- 10. sqlite C++和無符號整數操作
- 11. C長無符號整數操作
- 12. Powershell,如何聲明一個無符號的32位整數?
- 13. 存儲在一個無符號的16位整數的RGB
- 14. 如何在Z3中打印出整個符號表達式?
- 15. 整數的正則表達式(千位逗號,無小數)
- 16. 位操作符與無符號字符
- 17. 如何使用正則表達式,如果我在整個字符串
- 18. 使用正則表達式乘以一個字符串中的整數
- 19. 用位操作添加2個整數
- 20. 「帶符號和無符號整數表達式之間的比較」只帶有無符號整數
- 21. 如何preg_match一個數字可以用正則表達式6.5整除
- 22. 在一個無符號的32位整數中查找位的位置
- 23. 是否可以鎖定一個重載的括號操作符?
- 24. 重載的函數調用操作符可以使用多少個操作數?
- 25. 逗號表達式的左側操作數沒有效果
- 26. 從C#流中讀取一個無符號的24位整數
- 27. 的Java:實現一個無符號整數128位
- 28. 存儲一個8位無符號整數
- 29. 在GHCi中,我可以使用前一個表達式的結果嗎?
- 30. 如何編寫一個正則表達式,說'和無空格'?
+1因爲雙方的解釋都很重要! – psmears 2010-06-20 20:58:57