Language agnostic 整数如何转换为二进制;计算机;?

Language agnostic 整数如何转换为二进制;计算机;?,language-agnostic,decimal,cpu-architecture,Language Agnostic,Decimal,Cpu Architecture,我知道所有东西都以0和1的形式存储在计算机内存中。具体来说,让我们以integer为例。我们赋值n=5,它的等价二进制是101,前面有29个0。对我们来说,通过重复n%2,然后通过n/2,很容易找到二进制文件但我的问题是,由于计算机无法对给定的十进制数进行任何操作,计算机如何进行这种转换。如果有人正在考虑编写将十进制转换为二进制的程序,那么输入的数字首先存储为二进制,然后再进行操作。所以,说到我的问题,计算机如何在不做任何算术运算的情况下找到一个数字的二进制数。我非常想知道这个过程 如果我在思考

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


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

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

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

(50 - 48) * 10 + (52 - 48)
这将产生数字24。文本不是数字的十进制表示形式,而是实际数字二十四。计算机可以将其作为一个数字而不是字符串来处理


  • 假设使用基于ASCII的编码

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

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

    1 2 3 4
    
    然后,将每个数字乘以对应于其位置值的10的幂

    1000 200 30 4
    
    最后,将这些数字相加以获得所需的数字

    1234
    
    最后两个步骤通常使用Horner方案同时执行

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

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


    然后,计算机可以将这个BCD转换成二进制,并使用BCD的变体将其转换回二进制。现代x86处理器仍然将此电路作为
    fbld
    fbstp
    指令的一部分,尽管主流软件尚未使用它。

    5
    是计算机如何向您显示表示为
    00000101
    的内容(如果您要求的话)。数字是数字,所有的基本表示都是等价的。(1)您是如何将字符串“5”转换为二进制的?如何将字符串“50”转换为二进制(提示5*10)?计算机也做同样的事情。没有“转换”?!?我不知道你在说什么。ASCII码是计算机可以处理的1字节二进制整数。对于一个特定的x86示例,请参见(这个问题最初被标记为[assembly]。在assembly中,所有内容,甚至代码,都只是内存(或寄存器)中的字节)。顺便说一句,一个大段落加上每一句粗体并不能真正提高可读性。突出显示的内容太多,超出了第一个粗体句子的范围。x86的具体示例: