1.2.2 数制转换
1.非十进制数转换成十进制数
把非十进制数转换成十进制数采用按权展开相加法。具体步骤:首先把非十进制数写成按权展开式,然后按十进制数的计数规则求其和。
例1.2.1 试将二进制数(110110.11)B转换为十进制数。
解 将二进制数的每一位与其位权相乘,然后相加便得相应的十进制数。
(110110.11)B= 1×25+ 1×24+ 0×23+ 1×22+ 1×21+ 0×20+ 1×2-1+ 1×2-2= 32 + 16 + 0 + 4 + 2 + 0 + 0.5 + 0.25= (54.75)D
例1.2.2 将十六进制数(1ABC.EF)H转换为十进制数。
解 根据式(1.2.4),得到
(1AB.EF)H= 1×162+ 10×161+ 11×160+ 14×16-1+ 15×16-2= 256 + 160 +11 + 0.875 + 0.05859375 = (427.93359375)D
2.十进制数转换成其他进制数
如果待转换的十进制数含有小数点,那么必须将这个数分成整数部分和小数部分,两个部分的转换分别进行,然后将它们的转换结果合并起来。
先讨论整数的转换。
整数部分采用除以基数取出余数的方法,即将十进制整数除以基数R,取其余数,所得之商再除以R,再取其余数,如此重复,直到商为0。每次得到的余数构成转换结果的对应位数码,第一个余数为最低有效位,最后一个余数为最高有效位。下面举例说明。
例1.2.3 将十进制数(45)D转换为二进制数。
解 将45除以二进制基数2,取出余数1作为最低位k0,再将商22除以2,取出余数0作为k1,如此重复,直至最后的商为0,余数就是想要的二进制数的系数。具体过程如下:
因此,转换结果为(45)D= (101101)B。
例1.2.4 将十进制数(78)D转换成二进制数。
解 另一种转换方法:首先将十进制数分解成2的指数之和,然后根据式(1.2.3)写出对应位置的系数。手工转换一个较大的十进制整数时,这种方法比较实用。
(78)D= 64 + 8 + 4 + 2= 1×26+ 0×25+ 0×24+ 1×23+ 1×22+ 1×21+ 0×20= (1 0 0 1 1 1 0)B
接下来讨论小数的转换。
小数部分采用乘以基数取出整数的方法,即用基数R乘以要转换的十进制小数,从乘出的结果中取出整数,剩余的小数再乘以R,再取出整数,如此重复,直到小数部分为0或小数部分的位数满足误差要求进行“四舍五入”为止。每次得到的整数构成转换结果的对应位数码,第一个整数为最高有效位,最后一个整数为最低有效位。
例1.2.5 将十进制数(81.562)D转换成二进制数,要求转换误差不大于2-4。
解 (1)整数部分:(81)D= 26+ 24+ 20= (1010001)B。
(2)小数部分:采用乘以基数的方法进行转换时,可能出现小数部分一直不为0的情况,此时需要根据转换误差确定二进制小数的位数。根据2-m≤2-4,可求出m≥4,取m = 4,则
由于最后的小数0.992大于0.5,根据“四舍五入”原则,k-4应为1。因此,小数部分(0.562)D=(0.1001)B。
因此,转换结果为(81.562)D= (1010001.1001)B,其误差ε <2-4。
例1.2.6 将十进制数(152.513)D转换为十六进制数(保留3位小数),并求转换误差。
解 (1)先转换整数部分,采用除以基数取出余数的方法。
将152除以基数16,得到商为9且余数为8;再将商9除以16得到商为0且余数为9。余数就是想要的十六进制数的系数。具体过程如下:
因此,整数部分(152)D= (98)H。
(2)再转换小数部分。将(0.513)D乘基数取出整数,具体过程如下:
不断地将小数部分与基数16相乘,取出4个整数。注意,在十六进制中按照取整法(类似于十进制中的“四舍五入”),k-4=3<8,所以不需要向次低位进位。最后小数部分转换结果为
(0.513)D= (0.835)H
因此,最后的转换结果为(152.513)D= (98.835)H。
(3)求转换的绝对误差。
由于转换误差来自小数部分,因此将十六进制小数(0.835)H按权展开求和,得到十进制小数,即
(0.835)H= 8×16-1+ 3×16-2+ 5×16-3≈ (0.51294)D
所以,转换误差 ε = 0.51294 - 0.513 = -0.00006。
3.二进制数与十六进制数之间的转换
将二进制数转换成十六进制数时,可以采用分组转换法:以二进制数的小数点为基准,将小数点左边的整数每4位分成一组;同样,将小数点右边的小数每4位分成一组;左右两边不足4位的以0补足4位;每组代表十六进制数中的一位。
例1.2.7 将二进制数NB= (1101100110110011.01)B转换为十六进制数。
解 采用分组转换法。
所以,NB= (D9B3.4)H。
例1.2.8 将十六进制数(4E6.97C)H转换为二进制数。
解 由于十六进制数的基数16=24,因此将十六进制数的每位数码用4位二进制数表示即可。
所以,(4E6.97C)H= (0100 1110 0110.1001 0111 1100)B。