补码的加减法运算及溢出判断

在计算机当中我们通常需要使用补码来进行二进制数字的加减法运算 

首先先写出补码加减法运算的规则:

[X+Y]补=[X]补+[Y]补     即补码的和等于和的补码

[X-Y]补=[X]补+[-Y]补     这个是将减法转换成加法的形式这也是使用补码在计算机中进行减法运算的好处可以将减法转换成加法这样就会有助于计算机的运算。

这里列出补码运算的两个结论:

1.用补码表示的两个数进行运算得到的结果也是补码

2.符号位和数值位一样参与运算

关于如何求一个数的补码我在之前的文章里提到过原码 反码 补码 移码_用编程写诗的博客-CSDN博客

我们知道由于在计算机中储存的位数是一个确定的值所以我们知道补码的表示是有范围的一个n+1位的补码(含有一个符号位)它的表示范围是-2^n~2^n-1。所以我们在进行加减法的时候就会出现超出所能表示范围的数字。只有同号数相加才会出现溢出的现象例如两个负数相加或者两个正数相加只有这一种可能会出现溢出的现象。发生溢出这种事情对计算机很不友好会导致自动关闭软件甚至设备停机的后果,所以我们要避免这种现象的发生。

关于溢出的判断一共有三种方法:

1.根据符号位进行判断

当符号相同的两个数进行运算算出的得数跟原来的两个数符号位不相同则发生溢出。

fa fb表示两个操作数的符号位 fs表示运算结果的符号位 fs和fa,fb不一致则发生了溢出

2.根据符号位进位和数值位最高位进位来判断

由于在运算过程中符号位也是在参与运算的,所以符号位也会发生进位。如果符号位和数值位都没有进位或者都有进位那么我们说这个是没有溢出的否则我们说这个是发生溢出了。

3.最后一个也是最重要的一个采用双符号位的方式来进行的判断

我们知道在补码中是存在一个符号位的,这里采用双符号位的方式也就是“变形补码”的形式。原补码的符号位是什么这个双符号位就是什么例如:补码符号位是1那么双符号位就是11反之亦然。在运算过程中双符号位也是参与运算的,如果算出结果的双符号位是不一致的那么我们说这个是溢出的如果算出的双符号位是相同的那么我们说这个是没有溢出的。