JavaScript中的移位运算符有两种形式:有符号右移(>>)和无符号右移(>>>),这两种移位运算符的主要区别在于处理负数时的行为。
1. 有符号右移(>>):在JavaScript中,有符号右移会保留符号位,即如果数字是正数,那么结果仍然是正数;如果数字是负数,那么结果仍然是负数。-1(二进制表示为11111111111111111111111111110001)向右移动3位后,结果是-4(二进制表示为11111111111111111111111111000000)。
let num = -8; // 二进制表示为 1000 0000 console.log(num >> 2); // 结果为 -4
2. 无符号右移(>>>):在JavaScript中,无符号右移会将所有位都向右移动,对于正数,移动后高位填充0;对于负数,移动后高位填充1。-8(二进制表示为 1000 0000)向右移动2位后,结果是-24(二进制表示为 1000 0000)。
let num = -8; // 二进制表示为 1000 0000 console.log(num >>> 2); // 结果为 -24
3. 左移运算符(
let num = -8; // 二进制表示为 1000 0000 console.log(num << 2); // 结果为 -24
4. 混合使用位移运算符:你可以同时使用有符号和无符号的移位运算符来改变一个数值的二进制表示,你可以将一个整数的所有位向右移动一位,然后将结果的所有位向左移动一位,从而实现乘以2的效果。
```javascript
let num = -8; // 二进制表示为 1000 0000
console.log((num >> 1)