我知道我可以编写一个算法来将给定数字转换为二进制,即我将其除以2并查看余数等等。但是我遗漏了一些至关重要的东西。
当我写下我的代码时:
int x = 56;
计算机想要将56转换为二进制,因为这是它所知道的唯一语言,但它不能将56除以2,因为56不是二进制。 我的问题是,计算机是如何做到的?它是将每个数字转换为二进制数,乘以10并将它们加在一起还是有更快的方式?
答案 0 :(得分:0)
计算机仅适用于二进制文件。当你把
int x = 56;
在你的代码中,这只是文本。编译文本时,56将转换为二进制NUMERIC值。
二进制数字表示和二进制文本之间存在差异。此
111000
和
56
是否是相同数字的文字表示。如果您在程序中使用前者(例如支持二进制文本的Ada),编译器仍然必须将其转换为二进制数值。
答案 1 :(得分:0)
编译器使用算法将十进制数字“56”的字符串转换为最终存储为位“00111000”的数字值。 “56”可能会在记忆中像这样布置:
Address Value Comment
...
0xabab1212 0x35 This is the hex representation of the ASCII code for "5"
0xabab1213 0x36 This is the hex representation of the ASCII code for "6"
0xabab1214 0x00 Assuming null-terminated strings as in C
...
数值的表示形式如下:
Address Value Comment
...
0xabab1220 0x38 The hex representation of the decimal number 56
...
十六进制值0x35
,0x36
和0x38
只是基础位序列00110101
,00110110
和{{1}的简写符号这是硬件实际工作的内容。
关键的一点是计算机上没有“数字”这样的东西。只有字符串 - 我们可以用它来表示数字 - 所有的计算都是通过操纵字符串来完成的。键入字符串,编译器生成字符串,硬件存储字符串。