kau*_*tta 6 javascript bitwise-operators
我在Javascript注意到的一件事 -
a << -1
Returns 0 when a = even.
Returns -2147483648 when a = odd.
同样,当-1更改为某个其他-ve数字时,将返回不同的值.有人可以解释引擎盖下正在进行的操作吗?或者行为未定义?
谢谢
编辑
也不应该零填充右移即-2 >>> 1返回7?
-2 = 1110.之后,使用零填充右移,应该给出0111 = 7
但是 
 a = -2; console.log(a >>> 1);
回归
2147483647
我也想知道这是我在这里登陆的原因.我做了一点研究并找出了行为.本质上,JavaScript将操作数和移位值视为位序列而不是数字.它适用于32位整数(浮点数被截断),最大移位为32位.如果我们移动一个大于32的数字,所有的位都会移出,导致零.为确保移位小于或等于32,JavaScript会截断5个最低有效位[ a << (b&0x1F)]或可能使用模数方法[ a << (b%32)],从而产生相同的结果.
如果不这样做,请将您正在移位的负数视为一个位序列,而不是负数(即-1).在这种情况下b = -1 = 0xFFFFFFFF.由于此数字大于32,因此会被截断0xFFFFFFFF & 0x1F = 31或0xFFFFFFFF % 32 = 31.
因此在您的示例中,"a"从最低有效位一直移位到最高有效位(符号位).因此,移位的结果是0x00000000或(0x80000000 = -2147483648)取决于操作数是否设置了1位(奇数或偶数).
得到了我问题第二部分的答案,即-2 >>> 1 = 7。
JavaScript 总是处理 32 位。所以当我这样做时-2 >>> 1,真正发生的事情是 -
11111111111111111111111111111110 >>> 1这给出了01111111111111111111111111111111 = (2147483647)base10
| 归档时间: | 
 | 
| 查看次数: | 1390 次 | 
| 最近记录: |