【发布时间】:2012-05-08 23:30:21
【问题描述】:
计算机如何将二进制(例如 110011 (51))转换为相应的 ASCII 值 53('5') 和 49('1')?还有,电脑怎么把53和49转回110011?
【问题讨论】:
标签: binary decimal computer-architecture
计算机如何将二进制(例如 110011 (51))转换为相应的 ASCII 值 53('5') 和 49('1')?还有,电脑怎么把53和49转回110011?
【问题讨论】:
标签: binary decimal computer-architecture
二进制到十进制的转换通常作为一个重复的除法循环。如果我们从一个数字 N 开始,(N mod 10) 是最后一个数字,然后我们继续将 N 除以 10 并重复以获得其他数字。
从字符串转换为内部表示更容易。
在下一次迭代中(即“1”=ASCII 49)再次减去 48:49-48=1。我们在累加器上加 1,得到 51。没有更多字符,所以我们完成了,结果是 51。
计算机的内部表示是二进制的这一事实是偶然的。我们只需要能够在计算机内部进行加减乘以将字符串转换为数字即可。
(当然,减法只是一个负数的加法,而乘法只是一个加法序列,所以真正需要的只是加法。)
【讨论】:
尝试为此目的编写一个计算机程序。它通常在软件中完成,尽管一些处理器具有特殊用途的十进制指令。假设您的工作是查看带有二进制整数的纸条,并制作出带有 Unicode 代码点的纸条,您很快就会掌握基本的大纲。
【讨论】:
这两种方式都不会改变它们。 53 在内存中始终是 53。
当它需要显示时,会调用一个函数,该函数知道当它看到数字53 时,它会生成我们眼睛看到的图形5。或者在内存中它可能会将数字53 转换为数字53 和51,最终某些程序将显示为字符"5" 和"3"。
53 始终是110101。存储单元是一个位序列,将十进制的53 保存为位001101011。
同样,有些函数可以看到这些位,并可以在您的屏幕上生成字符 "5" 和字符 "3"。
但在计算机内部,它总是数字,总是二进制。
【讨论】:
将二进制转换为 ASCII:
1) 将您的数字除以十进制数 10(二进制 1010)并计算余数 2) 余数加上 48('0' 的 ASCII 值)。这会给你最后一个数字。 3)如果商为0,停止 4) 如果商大于 0,则使用商从步骤 1 重新开始。
例如。使用 base 10 (1010) 将 51 (110011) 转换为 ASCII:
110011 / 1010 = 0101 (5 decimal) remainder 0001
0001 (the remainder from above) + 110000 ('0') = 110001 (49 decimal or '1' in ASCII)
0101 (the quotient from above) / 1010 = 0 remainder 0101
0101 (the remainder) + 110000 ('0') = 110101 (53 decimal or '5' in ASCII)
【讨论】: