【问题标题】:How an integer number is converted to binary in a "computer"?如何在“计算机”中将整数转换为二进制?
【发布时间】:2021-01-28 20:47:07
【问题描述】:

我知道一切都以 0 和 1 的形式存储在计算机内存中。具体来说,让我们以整数为例。我们分配 n = 5,它的等效二进制将是 101 和 29 个前导 0。我们很容易通过重复 n%2 和 n/2 来找到二进制文件。 但我的问题是计算机如何进行这种转换,因为计算机无法对给定的十进制数进行任何操作。如果有人正在考虑编写将十进制转换为二进制的程序,那么输入数字也首先存储为二进制然后完成操作。所以归结为我的问题,计算机如何在不进行任何算术运算的情况下找到数字的二进制。我非常想知道这个过程。

如果我在思考过程中的某个地方有错误,请纠正我。

【问题讨论】:

  • 5 是计算机向您显示00000101 表示的东西的方式(如果您要求的话)。数字就是数字,所有的基本表示都是等价的。
  • (1) 您是如何将字符串“5”转换为二进制的?如何将字符串“50”转换为二进制(提示 5 * 10)?计算机做同样的事情。
  • 没有"conversion"?!?我不知道你在说什么。
  • ASCII 码是计算机可以操作的 1 字节二进制整数。对于特定的 x86 示例,请参阅NASM Assembly convert input to integer?(此问题最初标记为 [assembly]。在汇编中,所有内容,甚至代码,都只是内存(或寄存器)中的字节。)
  • 顺便说一句,一个大段落,每隔一个句子加粗并不能真正提高可读性。除了第一个粗体句子之外,突出显示的内容过多。

标签: language-agnostic decimal cpu-architecture


【解决方案1】:

您在计算机中键入的十进制数会存储为一系列字符,每个字符都是'0''9' 中的一个字符。在流行的 ASCII 字符集中,这些字符代码为 48 到 57。这些字符代码以二进制形式存储。例如,您输入的数字 1234 存储为四个数字的数组

49 50 51 52

要将这样的数组转换为整数,首先将每个字符代码转换为它所代表的数字。对于 ASCII,这是通过减去 48 来实现的。

1 2 3 4

然后,每个数字乘以对应其位值的 10 的幂。

1000 200 30 4

最后将数字相加得到想要的数字。

1234

最后两个步骤通常使用霍纳方案一次执行。

计算机在任何时候都不需要对二进制数以外的任何东西进行算术运算来执行这种转换。

从历史上看,还有其他方法可以执行这种转换。例如,许多历史计算机允许将数字以十进制存储为 BCD(二进制编码十进制),其中每个十进制数字存储在四位中。

然后计算机可以使用double dabble algorithm 的变体将此 BCD 转换为二进制并返回。现代 x86 处理器仍然包含此电路作为 fbldfbstp 指令的一部分,尽管主流软件仍未使用它。

【讨论】:

【解决方案2】:

十进制是数字的文本表示。而文本对计算机来说只是一个数字序列。

因此,当您在程序中找到 24 时,这实际上是存储在磁盘上的两个数字。[1] 具体来说,它们是 50 和 52。[1] sup> 编译器中的某个地方是一个函数,它将执行最终等价于

(50 - 48) * 10 + (52 - 48)

这将产生数字二十四。不是数字的十进制表示的文本,而是实际的数字二十四。计算机可以将其作为数字而不是字符串来处理。


  1. 假设基于 ASCII 编码

【讨论】:

    猜你喜欢
    • 2018-08-08
    • 1970-01-01
    • 2015-06-04
    • 2015-02-14
    • 2013-03-18
    • 2011-04-29
    • 2013-07-02
    • 1970-01-01
    • 2012-04-10
    相关资源
    最近更新 更多