【问题标题】:Decimal to binary number conversion十进制到二进制数的转换
【发布时间】:2011-01-10 17:29:46
【问题描述】:

-10 的二进制形式是什么?是怎么计算的?

【问题讨论】:

  • 如果合适,请将其重新标记为作业。我会这样做,但尼尔巴特沃思会打电话给我妈妈。
  • -10 是二进制(等于十进制的 -2)。 “-”不仅限于十进制数字。 ;)
  • 正如您可能从其中一些答案中看出的那样,表示取决于多种因素,例如处理器架构是什么或数字出现在哪种协议或文件格式中。并非所有平台都有相同的字节顺序,并不是所有的都使用二进制的恭维(虽然很多都这样做)
  • 这个问题没有完全说明。没有 -10 的二进制形式,即使我们忽略字节序(我们应该这样做,因为如上所述,问题不在于数字如何存储在内存中)。

标签: binary computer-science


【解决方案1】:

将 -10(十进制)转换为二进制:

反复将数字的绝对值(|-10| = 10)除以 2,直到商为 0:

(10 / 2 = 5 R 0)
(5  / 2 = 2 R 1)
(2  / 2 = 1 R 0)
(1  / 2 = 0 R 1) // zero is the value in the quotient so we stop dividing

放置余数以获得二进制等价物:

1010

对于 8 位单元,答案是 0000 1010,16 位单元是 0000 0000 0000 1010,依此类推。

通过反转位来取反码(我们假设一个 8 位单元保存最终值):

0000 1010
1111 0101 // bits are inverted

现在通过加 1 来取 2 的补码:

 1111 0101
+        1
----------
 1111 0110 // final answer

4 位单元格会发生什么?

一个人的补码是:

1010
0101 // inverted bits

取 2 的补码产生:

 0101
+   1
 ----
 0110 // final answer for a 4-bit cell   

由于数字应该是负数并且结果并不表明(数字以 0 开头,而它应该以 1 开头)会发生溢出情况。

【讨论】:

  • 非常详细的+1。您可能还想提及 Big/Little Endian。
  • @Johannes:在谈到二进制表示时,字节序并没有出现。这仅在计算机中存储 > 1 个字节时才有意义。 @Brandon:尼特:它是 ones' 的补充,而不是 one's
  • @Alok: 是的,看看 16 位单元 ^^
  • @Johannes:同样,只有在内存中存储数字时才会出现这种情况。这相当于说数字“一千二百三十四”具有基于字节序的表示1234或4321。数字只有一种表示,只有当我们将它存储在内存中时,我们才会谈论字节序。
【解决方案2】:

取10的二进制形式,将所有位取反,加一。

10 0000 1010 反转 1111 0101 添加 1 1111 0110

【讨论】:

  • 假设二进制补码且没有溢出。
  • 您的答案对于 8 位单元格是正确的。那么 4 位或 16 位单元呢?
  • @Brandon:无论字长如何,答案都是正确的;碰巧 10 会溢出一个有符号的 4 位字。
【解决方案3】:

关注this 链接。您可以通过找出ntwo's complement 来找到负数的二进制形式,例如-n

【讨论】:

  • 你假设二进制补码。负数没有“the”二进制形式。
【解决方案4】:

您的问题没有“正确”答案。首先,您必须定义要使用的表示。您想使用two's complementones' complementsign-magnitude 还是其他?然后你必须定义要使用多少位。

假设我们正在使用 5 位宽的表示。

+10: 0 1 0 1 0

让我们看看符号-幅度系统。在这个系统中,如果一个数字是负数,最高有效位(第 5 位)是1,否则是0。其余位表示数字的大小(绝对值)。

所以我们得到:

-10: 1 1 0 1 0 (sign-magnitude, 5 bits)

现在让我们看看一个的补码。在这里,只需将 1s 更改为 0s 即可表示负数,反之亦然(因此命名为 one 的补码——您对一个长序列 1s 进行补码)。

所以我们得到:

-10: 1 0 1 0 1 (ones' complement, 5 bits)

最后,让我们看看补码系统。在此,我们在其补码系统中取一个数字,然后将1 添加到它。

所以我们得到:

-10: 1 0 1 0 1
             1
     ---------
     1 0 1 1 0 (two's complement, 5 bits)
     ---------

因此,负数的二进制表示取决于我们使用的系统,以及我们可用的位数。

此外,您可能已经注意到撇号在ones'补码two's补码中的位置。为什么不是 one's 补码或 twos' 补码?然后回答,来自 Knuth:

二进制补码是针对 2 的一次幂进行补码的,而一个补码是针对一长串 1 进行补码的。实际上,还有一个“二进制补码表示法”,它具有基数 3 和关于 (2...22)3

的补码

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 2016-02-09
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多