移位运算符
按位移位可以被认为是向左或向右移动位,因此改变了操作数据的值。
左移
左移位运算符 (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
对于非负数,零填充右移和符号传播右移产生相同的结果。