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。