计算机中的十进制转二进制
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 函数 atoi
和 itoa
但完全只用二进制算法执行,利用一个小的知识库(ascii table、二进制值 10、100、1000 等)。
我想澄清一下:
- 我已经讨论过浮点运算和二进制编码的十进制(计算器)等参数
- 我知道小数只对人类理解有用
- 在示例中选择 Int 是为了简单
问题与数字的存储方式无关,而是与它们的解释方式有关。
谢谢!
计算机使用十六进制将字符串翻译成机器可以理解的内容。
所以你的例子中的数字 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 进制的转换无关 ) 而且我们没有库,也没有为我们进行转换的外部工具,转换是按照此答案中的指示完成的:
我在很多地方找过答案,但他们都说同样的话。 每当有人解释如何将十进制数转换为二进制数时,就会显示连续除以二的技巧。
如果我们在程序中声明一个数字(例如 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 函数 atoi
和 itoa
但完全只用二进制算法执行,利用一个小的知识库(ascii table、二进制值 10、100、1000 等)。
我想澄清一下:
- 我已经讨论过浮点运算和二进制编码的十进制(计算器)等参数
- 我知道小数只对人类理解有用
- 在示例中选择 Int 是为了简单
问题与数字的存储方式无关,而是与它们的解释方式有关。
谢谢!
计算机使用十六进制将字符串翻译成机器可以理解的内容。
所以你的例子中的数字 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 进制的转换无关 ) 而且我们没有库,也没有为我们进行转换的外部工具,转换是按照此答案中的指示完成的: