移位
之所以會有移位操作,最重要的因爲計算機中的數據就是用二進制的格式來保存的。所以,在計算機中的加減乘除都是要計算機利用移位操作來完成的。
但是移位會伴隨着一個問題的產生,就是移位操作後的,空出來的位置要補什麼?根據補充的邏輯不同,移位操作又可以分成 “邏輯移位” 和 “算術移位” ,而且二者最主要的區別是在一個動作右移的動作上。因爲數字在計算機中都是以二進制來存儲的,這樣就會產生一個問題,你要如何區別一個數是正數還是負數?按照計算機裏的做法,就是如果程序中有設定,那麼最高位也就是最左邊的那個位置,就是**“符號位”** 也就是專門用來標識正負數用的,“0” 爲正數,“1”爲負數。而對於 左移操作 來說,不管是 “邏輯” 還是 “算術”,移位操作產生的空位都是補 “0”
而區別就出現右移操作。
邏輯移位
邏輯右移的操作不管你是正數還是負數(也就是不管最高位是 “0”還是 “1”),空出來的最高位都是補“0”。
算術移位
算術右移:正數的最高位補 “0”,負數最高位補 “1” 。
Java 中的移位操作
邏輯移位 “>>>”
最高位直接補“0”。
算術移位 “>>”
正數最高位補 “0”,負數最高位補 “1”。