JAVA的三個移位運算符

>>(<<):帶符號右(左)移,高位補符號位。

>>>(<<<):不帶符號右(左)移,高位補零。

<<:左移,末尾補零。

 

在Thinking in Java第三章中的一段話:
  移位運算符面向的運算對象也是
  二進制的“位”。 可單獨用它們處理整數類型(主類型的一種)。左移位運算符(<<)能將運算符左邊的運算對象向左移動運算符右側指定的位數(在低位補0)。 “有符號”右移位運算符(>>)則將運算符左邊的運算對象向右移動運算符右側指定的位數。“有符號”右移位運算符使用了“符號擴展”:若值爲正,則在高位插入0;若值爲負,則在高位插入1。Java也添加了一種“無符號”右移位運算符(>>>),它使用了“零擴展”:無論正負,都在高位插入0。這一運算符是C或C++沒有的。
  若對char,byte或者short進行移位處理,那麼在移位進行之前,它們會自動轉換成一個int。只有右側的5個低位纔會用到。這樣可防止我們在一個int數裏移動不切實際的位數。若對一個long值進行處理,最後得到的結果也 是long。此時只會用到右側的6個低位,防止移動超過long值裏現成的位數。但在進行“無符號”右移位時,也可能遇到一個問題。若對byte或 short值進行右移位運算,得到的可能不是正確的結果(Java 1.0和Java 1.1特別突出)。它們會自動轉換成int類型,並進行右移位。但“零擴展”不會發生,所以在那些情況下會得到-1的結果。??無法理解??

發佈了14 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章