进位CF 溢出OF

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

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

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

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

有符号数用补码表示,补码可以这样理解:
进位CF 溢出OF

顺时针代表正数,逆时针代表负数,-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。这样是没有溢出的。