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

标签 binary decimal cpu-architecture

计算机如何将二进制(例如 110011 (51))转换为相应的 ASCII 值 53('5') 和 49('1')?此外,计算机如何将53和49转回110011?

最佳答案

二进制到十进制的转换通常作为重复除法循环进行。如果我们从数字 N 开始,(N mod 10) 就是最后一位数字,然后我们将 N 除以 10 并重复得到其他数字。

  1. 我们从 N=51 开始
  2. 51 mod 10 是 1。最后一位是 1。
  3. 除以 10 以丢弃我们刚刚提取的数字(整数除法循环),得到 5。
  4. (这是步骤 2 的重复,但 N 不同)5 mod 10 是 5。下一个数字是 5。
  5. 5/10 是 0(四舍五入),所以我们就完成了。倒序排列的数字是 1 和 5。
  6. 我们将每个数字值加上 48,得到相应的 ASCII 十进制数字。
  7. 所以最终结果是“51”。

从字符串转换为内部表示形式更加容易。

  1. 累加器从 0 开始
  2. 取第一个字符(此处为“5”)。这是 ASCII 53。减去 48 得到 5。
  3. 将其添加到累加器中即可得到 0+5=5。
  4. 请注意,还有另一个数字。将累加器乘以 10 得到 50。
  5. 返回第 1 步

在下一次迭代中(即“1”=ASCII 49)再次减去 48:49-48=1。我们向累加器加 1,得到 51。没有更多字符,所以我们完成了,结果是 51。

计算机的内部表示形式是二进制的这一事实是偶然的。我们只需要能够进行加、减、乘,就可以在计算机内部将字符串转换为数字。

(当然,减法只是负数的加法,而乘法只是一系列加法,所以加法就是真正需要的。)

关于计算机中的二进制到十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10507945/

相关文章:

java - 二进制补码,减去两个负二进制数

java - 如何将超过 9 个字符的二进制字符串转换为整数?

swift - 如何快速计算一个人的赞美的小数?

java - 在 Java 中,如何将十进制数转换为基数 36?

math - 如何使用 32 位除法指令执行 64 位除法?

intel - 为什么 Intel Haswell XEON CPU 偶尔会错误计算 FFT 和 ART?

c# - 多个项目依赖于同一二进制引用的解决方案

swift - 如何在 Swift 3 中将小数二进制转换为十进制小数?

python - Django 中的全局小数舍入选项

cpu-architecture - 为什么有这么多CPU架构: x86, x64,x87等…?