移位運算子
按位移位可以被認為是向左或向右移動位,因此改變了運算元據的值。
左移
左移位運算子 (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)
將向右移動位,新位將為 0
。0
從左側移入,向右的多餘位移出並丟棄。這意味著它可以將負數轉化為正數。
-30 >>> 2 => 1073741816
// -30: 111..1100010
//1073741816: 001..1111000
對於非負數,零填充右移和符號傳播右移產生相同的結果。