计算机如何将二进制,例如 110011 (51) 转换为相应的 ASCII 值 53('5') 和 49('1')?此外,计算机如何将 53 和 49 转回 110011?
4 回答
二进制到十进制的转换通常作为一个重复的除法循环。如果我们从一个数字 N 开始,(N mod 10) 是最后一个数字,然后我们继续将 N 除以 10 并重复以获得其他数字。
- 我们从 N=51 开始
- 51 mod 10 是 1。最后一位是 1。
- 除以 10 以丢弃我们刚刚提取的数字(整数除法),得到 5。
- (这是步骤 2 的重复,使用不同的 N)5 mod 10 是 5。下一个数字是 5。
- 5/10 是 0(四舍五入),所以我们完成了。倒序的数字是 1 和 5。
- 我们将 48 添加到每个数字值以获取 ASCII 中相应的十进制数字。
- 所以最终结果是“51”。
从字符串转换为内部表示更加容易。
- 累加器中从 0 开始
- 取第一个字符(此处为“5”)。那是 ASCII 53。减去 48 得到 5。
- 将其添加到我们的累加器中得到 0+5=5。
- 注意还有一个数字。将累加器乘以 10 得到 50。
- 返回步骤 1
在下一次迭代中(即“1”=ASCII 49)再次减去 48:49-48=1。我们在累加器上加 1,得到 51。没有更多字符,所以我们完成了,结果是 51。
计算机的内部表示是二进制的这一事实是偶然的。我们只需要能够在计算机内部进行加减乘乘即可将字符串转换为数字。
(当然,减法只是一个负数的加法,而乘法只是一个加法序列,所以真正需要的只是加法。)
To turn binary into ASCII:
1) take your number divide it by 10 decimal (1010 binary) and calculate the remainder 2) With the remainder, add 48 (the ASCII value for '0'). This gives you the last digit. 3) If the quotient is 0, stop 4) If the quotient is more than 0, start again from step 1 using the quotient.
Eg. Convert 51 (110011) to ASCII using base 10 (1010):
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)
尝试为此目的编写一个计算机程序。它通常在软件中完成,尽管一些处理器具有特殊用途的十进制指令。假设您的工作是查看带有二进制整数的纸条并制作带有 Unicode 代码点的纸条,您很快就会掌握基本大纲。
无论哪种方式,它都不会改变它们。53
永远是53
记忆中的一个。
发生的情况是,当它需要显示时,会调用一个函数,该函数知道当它看到数字时53
,它会生成我们眼睛看到的图形5
。或者在内存中它可能将数字53
转换为数字53
and 51
,最终某些程序将显示为字符"5"
and "3"
。
而且53
总是110101
。存储单元是位序列,并以十进制53
形式保存位001101011
。
同样,有一些功能可以看到这些位,并可以在您的屏幕上生成 character"5"
和 character "3"
。
但在计算机内部,它总是数字,总是二进制。