移位運算子

按位移位可以被認為是向左或向右移動位,因此改變了運算元據的值。

左移

左移位運算子 (value) << (shift amount) 將位移位 (shift amount) 位; 從右邊進來的新位將是 0 的:

5 << 2 => 20
//  5:      0..000101
// 20:      0..010100 <= adds two 0's to the right

右移( 符號傳播

右移運算子 (value) >> (shift amount) 也稱為符號傳播右移,因為它保留了初始運算元的符號。右移操作符將 value 指定的 shift amount 位向右移動。從右側移出的多餘位被丟棄。從左側進入的新位將基於初始運算元的符號。如果最左邊的位是 1 那麼新的位將全部為 1,而反之亦然 0

20 >> 2 => 5
// 20:      0..010100
//  5:      0..000101 <= added two 0's from the left and chopped off 00 from the right

-5 >> 3 => -1
// -5:      1..111011
// -2:      1..111111 <= added three 1's from the left and chopped off 011 from the right

右移( 零填充

零填充右移運算子 (value) >>> (shift amount) 將向右移動位,新位將為 00 從左側移入,向右的多餘位移出並丟棄。這意味著它可以將負數轉化為正數。

-30 >>> 2 => 1073741816
//       -30:      111..1100010
//1073741816:      001..1111000

對於非負數,零填充右移和符號傳播右移產生相同的結果。