在 JavaScript 中,右移运算符用来将一个数向右移动指定的位数。它的语法如下:
javascriptx >> y
其中,x 是要进行右移运算的数,y 是要向右移动的位数。右移运算符会将 x 的二进制表示向右移动 y 个二进制位,移动之后,右侧超出的位会被舍弃,左侧空出的位置会填补 0。
下面,我们来看一些具体的例子。
javascript3 >> 1 // 1
3 的二进制表示是 11,将其向右移动一位,就变成了 1,所以结果是 1。
javascript-3 >> 1 // -2
-3 的二进制表示是 11111111111111111111111111111101,因为它是一个负数,所以最高位是 1,表示它是一个有符号整数。将它向右移动一位之后,变成了 11111111111111111111111111111110,这个二进制数代表的是 -2,所以结果是 -2。
javascript1024 >> 2 // 256
1024 的二进制表示是 10000000000,将其向右移动两位,就变成了 1000000,这个二进制数代表的是 256,所以结果是 256。
需要注意的是,如果要进行的移位数大于等于 32,那么结果就会是 0。这是因为 JavaScript 中的整数都是 32 位的,可以用以下代码来验证。
javascript(1 << 32) === 1 // true
左移运算符<< 的意思是将一个数向左移动指定的位数,左移之后,右侧空出的位会被填补 0,左侧超出的位会被舍弃。
javascript3 << 1 // 6
3 的二进制表示是 11,将它向左移动一位之后,变成了 110,这个二进制数代表的是 6,所以结果是 6。
javascript-3 << 1 // -6
对于负数,左移运算会将符号位也一起移动。-3 的二进制表示是 11111111111111111111111111111101,将它向左移动一位之后,变成了 11111111111111111111111111111010,这个二进制数代表的是 -6,所以结果是 -6。
需要注意的是,左移运算的结果可能会超出 32 位整数的范围。如果左移之后的结果超过了 32 位,那么就需要对结果取模,只保留低 32 位。
javascript(1 << 64) % (1 << 32) === 1 // true
右移运算符 >>和无符号右移运算符 >>>的区别在于对待最高位的处理方式。对于有符号右移运算符 >>,如果要进行的移位数大于等于 32,那么结果就会是 -1。对于无符号右移运算符 >>>,则会将最高位的符号位也向右移动,当做普通二进制位来处理。
javascript-1 >> 1 // -1-1 >>> 1 // 2147483647
上一篇:javascript中定义常量
下一篇:css按钮按住改变颜色









