【发布时间】:2020-02-19 15:53:13
【问题描述】:
我知道 JavaScript 中的数字以 IEEE-754 格式存储。但是当我们使用整数,尤其是位运算符时,它们被表示为 32 位的二进制补码。
所以-1 将是0xFFFFFFFF。但是(-1).toString(2) 是-1。 -1 >>> 31 是 1,没错,但 -1 >>> 32 必须是 0,但它是 4294967295。而-1 << 32必须是0,但它是-1。
为什么按位运算以这种方式工作?而toString() 显示带有符号- 的数字,为什么这个减号不在符号位?还有为什么-1 >> 0 是-1,而-1 >>> 0 是4294967295?我知道>>和>>>有什么区别,但是第二个操作数是0,所以我不明白为什么这些操作以不同的方式工作。
【问题讨论】:
-
MDN 有关于 JavaScript 环境中按位运算符的良好文档:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
-
@DanielLowman 我已经读过了。但是我还是不明白为什么-1 >>> 32 不是0?我们将它移动 32 次并添加 32 个零,所以它应该是 0
标签: javascript bitwise-operators