【问题标题】:Decimal to binary in computers计算机中的十进制转二进制
【发布时间】:2021-03-05 11:12:57
【问题描述】:

我在很多地方都在寻找答案,但他们都说同样的话。 每当有人解释如何将十进制数转换为二进制时,都会显示连续除以二的技术。

如果我们在程序中声明一个数字(例如 int = 229),这没有任何意义,因为计算机不知道这个数字是什么,也不能除它两个。

据我了解,当声明 int 时,计算机会将数字视为简单字符。 要获得二进制数,对我来说唯一有意义的是这样的:

  • 计算机使用 Ascii 表来识别符号(2 - 2 - 9
  • 它采用符号9,找到与其实际二进制值“1001”( 9) [57 - 48]
  • 取第一个2,找到“00110010”(50),二进制值“10”(2 ),但知道它是第二个符号,它乘以“1010”(10)得到“10100”( 20)
  • “10100”与“1001”之和 = 11101 (29)
  • 它采用第二个2,找到“10”(2),但知道它是第三个符号,它将它乘以(100) 并获得“11001000” (200
  • 将“11001000”与“11101”相加 = 11100101 (229)

我走对了吗?

这个和逆转换(二进制到十进制)类似于 C 函数 atoiitoa,但完全只使用二进制算术执行,利用一个小的知识库(ascii 表,二进制值 10、100 , 1000 等)。

我想澄清一点:

  • 我已经讨论过浮点算术和二进制编码的十进制(计算器)等参数
  • 我知道小数只对人类理解有用
  • 示例中选择了 整数,因为它们很简单

问题与数字的存储方式无关,而与它们的解释方式有关。

谢谢!

【问题讨论】:

  • 据我了解,当声明 int 时,计算机会将数字视为简单字符。这是不正确的!处理类型转换完全取决于编译器,而不是 CPU 本身。您声明一个 int 值,然后编译器将其解释为相应的二进制值,其位大小取决于 CPU 架构。您编写的所有值和代码只不过是编译器的 ASCII 流。然后编译器有几个阶段来处理这个流并解释为对 cpu 有意义的东西,即十六进制代码,也就是目标代码。
  • @Kozmotronik ,当然,它只是文本(程序也可以用 Microsoft Word 编写)但这不会改变我的问题的含义:编译器使用哪种方法转换字符 229 转入11100101?
  • 这都是关于内存分配的。实际上并没有这样的转变。编译器只是将值放在它必须的位置。考虑这个例子: int a = 15; // 不管二进制转换。 // 编译器首先将其解释为机器的汇编代码,具体取决于架构。类似:MOV a,#15
  • @Kozmotronik,不管是在编译器中,在计算机中,在CPU中,在寄存器中,如果它的格式是文本,如果它的格式是十进制,数字15有在某处转换为二进制。
  • 也许我不能举一个很好的例子,无论如何。最后我只能告诉你,数字 15 转换为二进制的唯一位置是十六进制代码部署到处理器或内存时,换句话说,当它成为可执行文件时。由于计算机可以由多种处理器组成,因此进行这种转换的工具可能是特殊的编程工具,或者是编译器本身(通用台式计算机就是这种情况)。剩下的就是asc2。可能是一名专业计算机科学家可能比我的示例和解释更能告诉你。祝你好运。

标签: c character-encoding binary computer-science decoding


【解决方案1】:

计算机使用十六进制将字符串翻译成机器可以理解的内容。 因此,您示例中的数字 229 是 e5 -> 11100101 在python中

hx = hex(int(229))
print(bin(int(hx, 16)))

会给你0b11100101

【讨论】:

  • 我不认为有一个列表在“每个可能的十进制值”处分配其对应的二进制/十六进制,肯定有一个转换算法,可能我的问题不清楚......跨度>
【解决方案2】:

经过一番研究,我得出以下结论:

  • 我们编写的代码只不过是一系列字符,这些字符将被编译器解析并转换为 CPU 的指令
  • 字符本身就是比特,但没有必要加深这样的论点。
  • 为简单起见,这些指令可以表示为十六进制数字序列,但我们总是谈论位序列。
  • 下到汇编这样的低级语言,道理是一样的,文本(我们的汇编代码)会被汇编器转换成机器指令。
  • CPU本身不包含将字符序列“2-2-9”的位转换为11100101的逻辑,必须先进行转换。
  • 在这样的场景中:C code -> ASM -> Machine language,这种转换发生在机器语言生成之前。
  • 如果没有人实现这种转换的方法(与学术方法中的 base 10 到 base 2 的转换无关)并且我们没有库,没有为我们进行转换的外部工具,转换如以下答案所示完成:Assembler - write binary in assembly from decimal

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-26
    • 2014-10-30
    • 2019-09-22
    • 2017-06-05
    • 2015-11-01
    • 1970-01-01
    • 2018-08-08
    • 2015-02-14
    相关资源
    最近更新 更多