邏輯右移操作
回答
>>>
是按位右移運算符,帶有0符號擴展 - 換句話說,從左邊的「傳入」的所有位填充0。
-1由32位表示,它們全部爲1.當您向右移位1位且符號擴展爲0時,最終的結果是31位底部位仍爲1,而頂部位爲0 (符號位),所以你最終得到Integer.MAX_VALUE
- 這是2147483647,而不是2147483648作爲你的文章狀態。
還是在JLS來講,從section 15.19:
的
n >>>
s
值是n
右移s
位零擴展,在這裏的位置:如果
n
是肯定的,那麼結果與n >> s
相同。如果
n
爲負值且左側操作數的類型爲int,則結果等於表達式(n >> s) + (2 << ~s)
的結果。如果
n
爲負值且左側操作數的類型很長,則結果等於表達式(n >> s) + (2L << ~s)
的結果。
這個定義最終會帶來一點痛苦 - 使用IMO的「0符號擴展右移」解釋更容易。
@JusticeBauer:請不要使用評論提請注意完全無關的其他問題。 – 2014-10-22 05:43:23
你有最高的選票之一,所以認爲你可能有一個線索。我沒有任何其他方式聯繫本網站的人 – 2014-10-22 11:04:14
@JusticeBauer:這並不意味着留下隨機問題的評論是正確的方法去做事情。*故意*你不能要求特定的用戶尋求幫助 - 相反,你寫出最好的問題,並讓那些願意幫助找到它的人。 – 2014-10-22 11:45:49
這是因爲binary representation的-1
是11111111111111111111111111111111
。當你對它執行一個無符號的右位移操作(>>>
)時,它將所有位向右移動參數(在這種情況下爲1
)並用零填充左邊的空白空間,所以你得到了01111111111111111111111111111111
這是二進制表示Integer.MAX_VALUE = 2147483647
(不知道你從哪裏得到了2147483648)。
是的結果是2147483647 – 2014-10-20 14:03:50
- 1. 邏輯操作符操作
- 2. && XML(邏輯操作)
- 3. Android邏輯操作&&?
- 4. 邏輯不操作
- 5. 邏輯操作:我想輕鬆地進行邏輯操作
- 6. 在C中實現邏輯右移C
- 7. 從ADD和NAND向右移位邏輯?
- 8. MATLAB邏輯操作符:&& vs&
- 9. 邏輯或操作-1
- 10. C位操作邏輯(BITAND)
- 11. 請解釋邏輯右移,算術右移和右旋之間的區別
- 12. 只使用「〜&^ | + + << >> =」操作符和20個操作來實現邏輯右移
- 13. 邏輯左移
- 14. 邏輯操作不起作用
- 15. 協助查詢的邏輯和操作
- 16. 具有邏輯if/else操作的CPLEX
- 17. 位明智的操作邏輯
- 18. Ç按位邏輯操作益智
- 19. 邏輯操作,以刪除索引
- 20. 按位操作邏輯任務
- 21. 訪客模式和邏輯操作
- 22. 矩陣上的Matlab邏輯操作
- 23. 在StackNavigator上操作componentWillMount邏輯
- 24. 「任何」操作的邏輯條件
- 25. jQuery事件邏輯/操作順序
- 26. 邏輯運算符和位操作C
- 27. JVM中的邏輯NOT操作
- 28. 邏輯操作模式使用NOT
- 29. 列表操作邏輯需要幫助
- 30. MySQL邏輯操作SELECT查詢
這就是*按位*右移操作符 – Yetti99 2014-10-20 13:53:23
您的意思是說您無法得到這一行來給出您期望的結果,或者它給了您所寫的結果,但您不明白爲什麼? – 2014-10-20 13:55:14
是的,我不明白結果 – 2014-10-20 13:57:31