第2章 数据的表示和运算__补码加减运算器

若 第2章 数据的表示和运算__补码加减运算器第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)第2章 数据的表示和运算__补码加减运算器

 

因为4位的补码的可表示范围为-8~+7, 而-7-6=-13<-8, 所以0011(+3)一定发生了 溢出。是一个错误的值。