AVR单片机应用技术项目化教程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1.2 数制间的互相转换

二进制数便于计算机存储和运算,但二进制表示的数不直观,不便于人们记忆和使用,此时可以用十六进制来表示二进制,而人们生产生活已习惯的十进制数最常用,因此通常需要在这三种数制之间进行转换。

1.二/十进制互相转换数

(1)二进制数转换成十进制数

将二进制数进行权展开,并按乘权相加的规则进行运算,得到的和即为对应十进制数,如二进制数10110转换成十进制过程如下:

[10110]2=1×24+0×23+1×22+1×21+0×20=[22]10

10110.11B=1×24+0×23+1×22+1×21+0×20+1×2-1+1×2-2=22.75D

(2)十进制数转换成二进制数

十进制数转换成二进制数复杂些,需要进行除法取余运算,其规则可以概括为“除二取余倒记数”,即将需要转换的十进制数除以2,取其余数,其商再除以2再取余数,直到除尽为止,将所有余数按逆序排列便可得到其二进制数,如456D转换成二进制数的过程为

456/2, 商为228, 余数为0

228/2, 商为114, 余数为0

114/2, 商为57, 余数为0

57/2, 商为28, 余数为1

28/2, 商为14, 余数为0

14/2, 商为7, 余数为0

7/2, 商为3, 余数为1

3/2, 商为1, 余数为1

将余数结果按逆序排列,将最后一次除法运算的商写在最高位,转换之后的二进制数为111001000B。显然,将该二进制数乘权相加其结果为456D。此外,如果二进制数有小数部分,则小数部分和整数部分分开转换,整数部分按“除二取余倒记数”进行转换,小数部分按“乘二取整顺记数”进行转换,即将小数部分乘以2取商的整数部分(小数点右边数),再将商的小数部分(小数点左边)乘以2,依次不断重复,直到满足所需计数精度即可,将限于篇幅不再赘述。

2.二/十六进制互相转换

二进制数与十六进制数之间的转换比较简单。将二进制数转换成十六进制数的方法为将二进制数从右到左,每四个排成一组,不足四个的在左边补零,每组4个二进制数乘权相加即可得到相应的十进制数,如10011011B,转换成十六进制为

所以结果为9BH。

十六进制数转换成二进制数为二进制数转换成十六进制数的逆过程,将每一位十六进制数转成4位二进制数即可,例如137FH,转换成二进制数为

1=0001B

3=0011B

7=0111B

F=1111B

故结果为0001001101111111B。

3.十/十六进制互相转换

十进制数转换成十六进制数与十进制数转换成二进制数类似,为除16取余数逆记数,将最后一次除法运算的商写在最高位。如500D转换成十六进数制其过程如下:

500/16,商为31,余数为4

31/16,商为1,余数为15

因此其结果为1F4H。

十六进制数转换成十进制数与二进制数转换成十进制数类似,按乘权相加法进行转换,如3F45H转换成十进制的过程为

3×163+F×162+4×161+5×160=12288+3840+64+5=16197D