进位CF 溢出OF

进位标识CF(Carry Flag)针对无符号数加法。
溢出标识OF(OverFlow Flag)针对有符号数加法。

假设数值用3位二进制表示。

进位比较好理解,两个数相加,如果第四位有为1,就代表有进位。

溢出是针对有符号数,用补码表示,首位表示符号,后面数值用补码表示。

有符号数用补码表示,补码可以这样理解:
这里写图片描述

顺时针代表正数,逆时针代表负数,-1和7是同一个位置,1和7就互为补数,1+7=8.
x 表示一个负数,它的补数是 8 + x ,注意 x 是负数。

溢出形象的表示就是正转超过一圈,或逆时针转超过一圈。

一正一负两个数相加,是不会溢出的。两个正数相加,或两个负数相加,才有可能溢出。

两个正数相加是否溢出就看符号位,如果符号位为1,就代表溢出。

两个负数相加是否溢出也是看符号位,如果符号位为0,就代表溢出。

x 代表两个负数的和,如果没有溢出, 8 < x < 0 ,x的补码是 x + 8 + 8 (因为是两个负数相加,所以加两个8),这个值就是计算机表示的数值 8 < x + 16 < 16 ,也就是一定会有一个进位到符号位,两个负数的符号位都是1,所以符号位最后是1。这样是没有溢出的。

猜你喜欢

转载自blog.csdn.net/familyshizhouna/article/details/80180418