通常我们说的加减法进位方式判断是否溢出一般指的都是补码方式运算下的。无论是一位符号位还是两位符号位,逻辑是相同的。
先由一位符号位说起。
假设是5位机器位,一位用作符号位,四位用作数据位,那么数据的表示范围是:
−24 ~ 24−1
即:-16~15
因此我们上来就看一个溢出的例子,形成一种直观的感受:
-8-9 = -17,果断是溢出的。
补码表示
1,1000
1,0111
=0,1111
得到的数字是+1.
具体发生了什么,你看,符号位发生了进位。但数据位的运算并没有进位。
两个负数的符号位一进位,加和的数据居然由负变正了,所以肯定是发生了溢出。如果数据位也进位,就会让符号位还是1,看起来,符号位没有变化,因此检查不出来已经发生了进位。
而在补码运算中,数据位高位为1,其实是比较小的数,除了-8这种刚好卡在边界的,其他较大的,如:
[0]补=0,0000[−1]补=1,1111