二进制和十六进制:转换过程

作者: Digi-Key 工程师 Kaleb Kohlhase

本帖将讨论基数10和两个备受程序员欢迎的替代基数之间的转换过程。请参考上一篇帖子:二进制和十六进制:数字格式,了解有关基数结构的背景信息。

十进制

从众所周知的记数制着手是最简单的,因为十进制在计算方面遵循的规则与二进制和十六进制是相同的。十进制会在每个“位”上使用以下数字:0、1、2、3、4、5、6、7、8和9。我们来看一个随机的四位数:1523
Dedcimalformat
请注意,最高指数比数字总数少一个,并且指数的顺序为从右到左,这对任何基数而言都是相同的。如果按照公式进行计算,我们发现这些数字加在一起等于1523:

1*10^{3}+5*10^{2}+2*10^{1}+3*10^{0}=1523

任何基数格式均使用相同的过程,但不同的基数会使用不同的数字。从任何其他基数转换到十进制的过程均不相同。

十进制到二进制

以下是将十进制值转换为二进制值的步骤,我们继续使用上面那串数字。二进制中只能使用两位数字:0和1。

  1. 确定可被1523除的2的最高次幂,在本例中,为2的10次幂(1024)。
  2. 将1523除以1024,向下取整,找到余数。1024只能被1523除一次,因此最高有效数位为1。余数为499。
  3. 确定下一个最小次幂是否可以被余数除,在本例中,2的9次幂不能被499除,因此下一个数字是0(到目前为止,我们得出了数字10)。继续减小指数,直到可以被499除(如果不能被余数除,则记为0)。在本例中,2^8确实可以被499除,因此下一个数字为1(此时得出101)。将前一个余数除以2的下一次幂可得到新的余数。在本例中,新的余数是243。
  4. 对每个余数重复执行步骤2和3,直至计算到2^0:243是新的余数;2^7可以被243除(下一位是1,得出数字1011),余数为115。2^6可被115除(下一位是1,10111),余数为51;2^5可被51除(下一位是1,101111),余数为19;2^4可被19除(下一位是1,1011111),余数为3;2^3不可被3除(下一位是0,10111110);2^2不可被3除(下一位是0,101111100);2^1可被3除(下一位是1,1011111001),余数为1;2^0可被1除(最后一位是0,最终值为10111110011),不再有余数。

根据上述步骤,十进制数1523等于二进制数10111110011:

1*2^{10}+0*2^{9}+1*2^{8}+1*2^{7}+1*2^{6}+1*2^{5}+1*2^{4}+0*2^{3}+0*2^{2}+1*2^{1}+1*2^{0}
=1523

十进制到十六进制

十六进制共使用16位数字:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,其中A=10、B=11、C=12、D=13、E=14、F=15。转换为十六进制的过程与之前基本一样,不过我们会使用16作为基数,因此位数会大大减少。可被1523除的16的最高次幂是16^2,因此最终结果中只有三位数。将1523除以256,向下取整等于5,因此使用的数字为5;余数为243。16^1可被243除以15次,所以下一位是F;余数3。16^0可被3除以3次。因此最终的数字为5F3:

5*16^{2}+15(F)*16^{1}+3*16^{0}=1523

从技术上讲,数字的二进制表示法更长,却是绝大部分应用所不可或缺的。在表示较大值时(二进制可能会非常冗长),采用十六进制会更加方便。市面上有很多计算器可帮助您转换数值,但只有知晓了结构的背景才能了解不同的应用是如何使用记数制的。

我们还将介绍一些在设计中使用了这些值或概念的应用和特定零件,以及不同的数字格式为何如此重要。

英文原文链接:Binary and Hexadecimal : Conversion Process