Java中的移位運算有三種形式:左移運算(<<),右移運算(>>)和無符號右移運算(>>>)。
左移運算(<<):將一個數的所有位向左移動指定的位數,右邊空出的位補0。例如:2 << 1得到4,即2的二進制表示為10,左移1位后變為100,即4的二進制表示。
右移運算(>>):將一個數的所有位向右移動指定的位數,左邊空出的位根據原來的最高位填補。如果原來是正數,則左邊用0填補,如果原來是負數,則左邊用1填補。例如:-2 >> 1得到-1,即-2的二進制表示為11111111111111111111111111111110,右移1位后變為11111111111111111111111111111111,即-1的二進制表示。
無符號右移運算(>>>):將一個數的所有位向右移動指定的位數,左邊空出的位補0。無符號右移運算與右移運算不同的是,無符號右移運算不考慮符號位,將符號位當作普通位處理。例如:-2 >>> 1得到2147483647,即-2的二進制表示為11111111111111111111111111111110,無符號右移1位后變為01111111111111111111111111111111,即2147483647的二進制表示。
需要注意的是,移位運算只能用于整數類型(byte、short、int和long),不能用于浮點數類型。此外,移位位數必須是非負數且小于整數的位數,否則會出現異常。