js中的>>表示有符号位移,>>>表示无符号位移,当操作一个正数的时候,两者无差别:

10>>1
/*结果:5*/
10>>>1
/*结果:5*/

因为10的二进制是1010,向右移动一个就是101,十进制中代表的是5。

但是如果对于负数,那么就相差非常大了:

-2>>1
/*结果:-1*/
-2>>>1
/*结果:2147483647*/

-2在计算机中是以补码存在(补码=反码+1),也就是11111111111111111111111111111110(一共32位,4个字节)。

1.如果是>>1,表示有符号的位移,右边移去了一个0,左边补充一个1(正数补充0,负数补充1),变成11111111111111111111111111111111,十进制为-1。

2.如果是>>>1,表示无符号的位移,右边一去了一个0,左边补充一个0(无视正数,负数,一直补充0),变成01111111111111111111111111111111,现在变成了一个正数(首位为0表示正数,1表示负数),就是2147483647。

回到顶部
我要评论

所有评论

返回
邮箱:
绑定
取消
×

我要评论

回复:

昵称:(昵称不超过20个字)

图片:

邮箱:
绑定邮箱后,若有回复,会邮件通知。
提交
还可以输入500个字