STC单片机原理及应用:从器件、汇编、C到操作系统的分析和设计(立体化教程)(第2版)
上QQ阅读APP看书,第一时间看更新

4.3 正数码制转换

4.3.1 十进制整数转换成其他进制数

本节介绍十进制整数转换成二进制数和十六进制数的方法。

1.十进制整数转换成二进制数的方法

将十进制正整数转换成对应的二进制数的方法主要包括长除法和比较法。

1)长除法

采用长除法,除数始终为2,将十进制进行分解,直到商为0结束。然后,按顺序将最后得到的余数排在最高位,而最先得到的余数排在最低位。

【例4-1】 使用长除法将十进制整数59转换成所对应的二进制数。

59÷2=29…1

29÷2=14…1

14÷2=7…0

7÷2=3…1

3÷2=1…1

1÷2=0…1

注意:…前面的数字表示商,…后面表示的数字为余数。所以,十进制正整数59所对应的二进制数为111011。

2)比较法

也就是让需要转换的正整数和不同的二进制权值进行比较。

(1)当需要转换的正整数大于所对应的二进制权值时,得到1,并且将转换的正整数减去二进制权值得到余数。然后,再用得到的余数与下一个二进制权值进行比较。

(2)当需要转换的数小于所对应的二进制权值时,得到0,并且不做任何处理。

【例4-2】 使用比较法将十进制整数59转换成所对应的二进制数。

通过比较法,如表4.2所示,得到十进制正整数59所对应的二进制数为111011。

表4.2 比较法将十进制正整数转换为二进制数

从以上两种方法可以看出,比较法比长除法更容易理解,显著降低了运算量。并且,只要改变比较的权值,就可以得到十进制转换成其他进制的计算方法。

2.十进制整数转换成十六进制数的方法

将十进制正整数转换成对应的十六进制数的方法主要包括长除法和比较法。

1)长除法

采用长除法,除数始终为16,将十进制数进行分解,直到商为0结束。然后,按顺序将最后得到的余数排在最高位,而最先得到的余数排在最低位。

【例4-3】 使用长除法将十进制整数4877转换成所对应的十六进制数。

4877÷16=304…13(D)

304÷16=19…0

19÷16=1…3

1÷16=0…1

注意:…前面的数字表示商,…后面表示的数字为余数。所以,十进制正整数4877所对应的十六进制数为130D。

2)比较法

比较法就是让需要转换的正整数和不同的十六进制权值进行比较。

(1)当需要转换的正整数大于所对应的十六进制权值时,得到商,并且转换的正整数减去十六进制权值与商的积得到余数。然后,再用得到的余数与下一个十六进制权值进行比较。

(2)当需要转换的数小于所对应的十六进制权值时,得到0,并且不做任何处理。

【例4-4】 使用比较法将十进制整数4877转换成所对应的十六进制数。

通过比较法,如表4.3所示,得到十进制正整数4877所对应的十六进制数为130D。

表4.3 比较法将十进制正整数转换为十六进制数

4.3.2 十进制小数转换成二进制数

将十进制小数转换成二进制数的方法主要包括长乘法和比较法。

1.长乘法

将小数乘以2,取其整数部分的结果。然后,再用计算后的小数部分依此重复计算,算到小数部分全为0为止。在读取整数部分的结果时,最先得到的整数放在小数的最高有效位,而最后得到的整数放在小数的最低有效位。

【例4-5】 使用长乘法将一个十进制小数0.8125转换成所对应的二进制小数。

0.8125×2=1.625 取整是1

0.625×2=1.25 取整是1

0.25×2=0.5 取整是0

0.5×2=1.0 取整是1

所以,十进制小数0.8125所对应的二进制小数表示为0.1101。

2.比较法

也就是让需要转换的小数和所对应的二进制权值进行比较。

(1)当需要转换的小数大于所对应的二进制权值时,得到1,并且将转换的小数减去所对应的二进制权值得到余数。然后,再用得到的余数与下一个二进制权值进行比较。

(2)当需要转换的小数小于所对应的二进制权值时,得到0,并且不做任何处理。

【例4-6】 使用比较法将一个十进制小数0.8125转换成所对应的二进制数。

通过比较法,如表4.4所示,得到十进制小数0.8125所对应的二进制数为0.1101。

表4.4 比较法将十进制小数转换为二进制小数

思考与练习4-1:完成下面整数的转换(使用最少的位数):

(1)(35)10=(___)2=(___)16=(___)8

(2)(213)10=(___)2=(___)16=(___)8

(3)(1034)10=(___)2=(___)16=(___)8

思考与练习4-2:完成下面正数的转换(使用最少的位数):

(1)(13.076)10=(___)2

(2)(247.0678)10=(___)2