一、区别
- 无符号右移:正负数在最高位均补0,
- 有符号右移:正数的最高位补0,负数的最高位补1
二、示例
1、正数
正数的有符号右移与无符号位移结果相同
以正整数10为例,其二进制表示:
0000 0000 0000 0000 0000 0000 0000 1010
1.1、有符号右移(>>)
有符号位移的最高位补0。
- 10的二进制表示:0000 0000 0000 0000 0000 0000 0000 1010,
- 10右移一位为:0000 0000 0000 0000 0000 0000 0000 0101(10进制的5)
代码示例:
var b = 10;
console.log('b >> 1:', b >> 1);
> "b >> 1:" 5
1.2、无符号右移(>>>)
同有符号右移。
代码示例:
console.log('b >>> 1:', b >>> 1);
> "b >>> 1:" 5
2、负数
负数的有符号位移最高位补1,无符号右移的最高位补0。
以-10为例,其二进制表示为:
1111 1111 1111 1111 1111 1111 1111 0110
2.1、有符号右移(>>)
有符号位移的最高位补1。
- -10的二进制表示:1111 1111 1111 1111 1111 1111 1111 0110,
- -10右移一位为:1111 1111 1111 1111 1111 1111 1111 1011(10进制的-5)
代码示例:
var c = -10;
console.log('c >> 1:', c >> 1);
> "c >> 1:" -5
2.2、无符号右移(>>>)
无符号位移的最高位补0。
- -10的二进制表示:1111 1111 1111 1111 1111 1111 1111 0110,
- -10右移一位为:0111 1111 1111 1111 1111 1111 1111 1011
代码示例:
console.log('c >>> 1:', c >>> 1);
// js中int型为4个字节
> "c >>> 1:" 2147483643