【问题标题】:Why does Javascript treat a number as a two's complement为什么Javascript将数字视为二进制补码
【发布时间】:2016-05-03 00:12:13
【问题描述】:

这里解释了为什么~5等于-6 from here

5 = 0000 0101

翻转 (~5) = 1111 1010

那么,哪个 1111 1010 代表的数字是多少?由于第一个数字是 1 我们知道 这是一个负值。要找到哪个值,请执行

-(翻转(1111 1010) + 1) = -(0000 0101 + 1) -(0000 0110)= -6

我想知道为什么 Javascript 将 ~5 的结果视为二进制补码形式的数字?

我的困惑源于这样一个事实,即如果我在控制台中写入 0b11111010,它的计算结果为 250,而不是 -6

【问题讨论】:

  • 您的问题简化为“为什么整数在 Javascript 中签名?”。
  • 我的困惑源于这样一个事实:如果我在控制台中写0b11111010,它的计算结果是250,而不是-6
  • 那是因为整数不是 8 位的。
  • 你能详细说明一下吗?
  • 5 是一个整数,正如 Oliver 指出的那样,不是 8 位。另一方面,0b11111010 是一个 8 位二进制文​​件。

标签: javascript binary


【解决方案1】:

因为这就是 Javascript 以二进制表示负数的方式。 Docs:

所有位运算符的操作数都转换为二进制补码格式的有符号 32 位整数。二进制补码格式意味着数字的负数对应物(例如 5 与 -5)是数字的所有位反转(按位非数字,也就是数字的反码)加一。

【讨论】:

    猜你喜欢
    • 2011-10-14
    • 2016-07-16
    • 2018-12-14
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 2015-08-26
    • 1970-01-01
    相关资源
    最近更新 更多