4.5 负数补码的计算
本节介绍负数补码的计算方法,内容包括负整数补码的计算和负小数补码的计算。
4.5.1 负整数补码的计算
负整数二进制补码的计算主要有下面的两种方法。
1.原码转补码
将一个正数转换为与一个二进制补码编码同样幅度的负数。其步骤包括:
(1)将该负数所对应的正数按位全部取反。
(2)将取反后的结果加1。
【例4-7】 将+17转换为-17的二进制补码。
(1)对应的+17的原码为00010001。
(2)按位取反后变成11101110。
(3)结果加1,变成11101111。
【例4-8】 将-35转换为+35的二进制补码。
(1)对应的-35的补码为11011101。
(2)按位取反后变成00100010。
(3)结果加1,变成00100011。
【例4-9】 将-127转换为+127的二进制补码。
(1)对应的-127的补码为10000001。
(2)按位取反后变成01111110。
(3)结果加1,变成01111111。
【例4-10】 将+1转换为-1的二进制补码。
(1)对应的+1的原码为00000001。
(2)按位取反后变成11111110。
(3)结果加1,变成11111111。
2.比较法
比较法的计算步骤包括:
(1)得到需要转换负数的最小权值,该权值为负数,以-2i表示,使得其满足:
-2i<需要转换的负数
(2)取比该权值绝对值2i小的权值,以2i-1,2i-2,…,20的幂次方表示。
(3)需要转换的负数+2i,得到了正数,以后的权值2i-1,2i-2,…,20按照前面的方法和这个正数进行比较。
【例4-11】 使用比较法得到负整数-97所对应的二进制补码。
对于负的十进制整数-97来说,假设使用8位二进制数进行表示,则其所对应的二进制补码为10011111B,如表4.5所示。
表4.5 有符号整数的二进制补码表示
4.5.2 负小数补码的计算
对于负小数二进制补码来说,最容易的方法就是比较法。其方法和前面介绍负整数补码中所使用的比较法类似。步骤如下:
(1)得到需要转换负数的最小权值,该权值为负数,以—20表示。
(2)取比该权值绝对值2i小的权值,以2-1,2-2,…,2-N的幂次方表示。
(3)需要转换的负小数+1,得到了正数,以后的权值2-1,2-2,…,2-N按照前面的方法和这个正数进行比较。
【例4-12】 使用比较法得到负小数-0.03125所对应的二进制补码,如表4.6所示。对于负小数-0.03125来说,其所对应的二进制补码为1.11111。
表4.6 有符号小数的二进制补码表示
思考与练习4-3:当数据宽度为8位时,使用补码表示下面的负整数:
(1)-1=___。
(2)-127=___。
(3)-55=___。
思考与练习4-4:当数据宽度为8位时,可以表示整数的范围是___。
思考与练习4-5:当数据宽度为16位时,可以表示整数的范围是___。
思考与练习4-6:当数据宽度为8位时,使用补码表示下面的小数:
(1)-0.897=___。
(2)-0.003=___。
上面使用二进制数进行表示时,是否存在误差?如果有误差,请计算误差的大小。