为什么JavaScript中100 >> 100和100 >>> 100返回结果都是6?
问题原因核心是JavaScript位运算的内置规则
JavaScript的位运算完全遵循ECMAScript标准定义的执行逻辑,和浏览器实现无关,具体规则如下:
- 所有位运算执行前,都会先将两个操作数转换为32位整数,超过32位的部分直接截断丢弃
- 移位操作的位数不会直接生效,会先对32取模,也就是实际有效移位位数 = 输入的移位位数 & 31(等价于取输入值除以32的余数)
针对你测试的100 >> 100计算过程:
- 先算有效移位位数:100除以32的余数为4,所以实际只会右移4位
- 100的32位二进制表示为
0b00000000000000000000000001100100 - 右移4位后结果为
0b00000000000000000000000000000110,对应十进制值就是6
为什么无符号右移>>>结果也是6
因为100是正数,32位表示的最高位符号位为0,此时符号传播右移(>>)的高位补符号位、和无符号右移的高位补0逻辑完全一致,再加上有效移位位数都是4,所以运算结果没有差异。
你可以做个简单验证:运行100 >> 4或者100 >>> 36,得到的结果都会是6。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

