计算机中的十进制转二进制

Decimal to binary in computers

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

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

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

  • Computer uses Ascii table to recognize the symbols ( 2 - 2 - 9)
  • It takes the symbol 9, finds "00111001" (57 in ascii table) which is associated to its real binary value "1001" (9) [57 - 48]
  • It takes the first 2, finds "00110010" (50), binary value "10" (2), but knowing it is the second symbol, it multiplies it by "1010" (10) and obtains "10100" (20)
  • It sums "10100" to "1001" = 11101 (29)
  • It takes the second 2, finds "10" (2), but knowing it is the third symbol, it multiplies it by (100) and obtain "11001000" (200)
  • It sums "11001000" to "11101 " = 11100101 (229)

我走在正确的轨道上吗?

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

我想澄清一下:

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

谢谢!

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

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

会给你0b11100101

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

  • 我们写的代码无非是一系列的字符,编译器会解析这些字符,然后转化为CPU
  • 的指令
  • 字符本身就是位,但没有必要深化这种争论。
  • 为简单起见,这些指令可以表示为十六进制数序列,但我们一直在谈论位序列。
  • 再往下说汇编这样的低级语言,道理是一样的,文本(我们的汇编代码)会被汇编器转换成机器指令。
  • CPU本身不包含将字符序列“2-2-9”的位转换为的逻辑11100101,必须先进行转换。
  • 在这样的场景中:C code -> ASM -> Machine language,这种转换发生在机器语言生成之前。
  • 如果没有人实现此转换的方法(与使用学术方法从 10 进制到 2 进制的转换无关 ) 而且我们没有库,也没有为我们进行转换的外部工具,转换是按照此答案中的指示完成的: