第2章 数据的表示和运算__补码加减运算器
若 ,
, 则[x+y]补, [x-y]补的运算表达式如下:
[x+y]补 = [x]补 + [y]补 (mod 2的n次方)
[x-y]补 = [x]补 + [-y]补 (mod 2的n次方)
从上式可看出,无论 x, y 是正数还是负数,补码的加、减运算可统一用加法实现, 而且[x]补 和[y]补 的符号位可以和数值位一起参与运算, 加、减运算结果的符号位也在求和运算中直接得出。
可以看到,实现减法的主要工作在于求[-y]补。
一 求一个数的负数的补码由其补码"各位取反, 末位加1 "得到。
二 因为无符号整数相当于正整数, 而正整数的补码表示等于其二进制表示本身, 所以, 无符号整数的二进制表示相当于正整数的补码表示。
看一个例子:用4位补码计算 “-7-6” 和 “-3-5” 的值。
解: [-7] 补 = 1001, [-6]补 = 1010, [-3]补 = 1101, [-5]补 = 1011
[-7-6]补 =[-7]补 + [-6]补 = 1001 + 1010 = 0011 (+3)
[-3-5]补 = [-3]补 + [-5]补 = 1101 + 1011 = 1000(-8)
因为4位的补码的可表示范围为-8~+7, 而-7-6=-13<-8, 所以0011(+3)一定发生了 溢出。是一个错误的值。