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的結果。ide

相關文章
相關標籤/搜索