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

    1. 10>>1
    2. /*结果:5*/
    3. 10>>>1
    4. /*结果:5*/

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

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

    1. -2>>1
    2. /*结果:-1*/
    3. -2>>>1
    4. /*结果:2147483647*/

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

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

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

    回到顶部
    我要评论

    所有评论

      相关文章