1、OF与CF概述
OF(Overflow Flag,溢出标志位):有符号数之间加减运算的溢出标志
CF(Carry Flag,进位/借位标志位):无符号数之间加减运算的溢出标志
快速判断(加法)(减法可转换为加法)
有符号数的符号位进位和最高位进位不同时,OF=1,否则OF=0(记忆:0+0必然不溢出,此时符号位和最高位的进位相同,均为0)
无符号数的最高位进位为1时,CF=1,否则CF=0
对有符号数而言(要求两个数都是有符号数),
同号相减,不溢出,OF=0
异号相加,不溢出,OF=0
对无符号数而言(要求两个数都是无符号数),
大减小,不溢出,CF=0
小减大,溢出,CF=1
注意
二进制数的加减运算会导致OF和CF变化
原因:整数的加减运算没有本质上的不同,都是二进制数字间进行加减运算
虽然说OF是与有符号数有关,但无符号数进行运算时,OF也会被改变,但此时OF无意义,没人在乎他
同理,有符号数运算时,CF也会相应发生变化,我们也不关心CF的变化
小tips
减法转换为加法,直接用二进制算,从而可方便地判断溢出:[x]补-[y]补=[x]补+[-y]补
2、OF
加法判断
异号数相加,必然不溢出,OF=0
十进制:两有符号数相加,结果溢出,则OF=1,否则OF=0
溢出:结果超过该数据类型的表示范围,一般为-2n-1~2n-1-1,n为有符号整数的位数
二进制:同号有符号数相加,若结果与它们符号不同,则OF=1,否则OF=0
减法判断
同号数相减,必不溢出
十进制:若有符号数相减,结果溢出,则OF=1,否则OF=0
溢出:结果超过该数据类型的表示范围,一般为-2n-1~2n-1-1,n为有符号整数的位数
二进制:异号有符号数相减,结果与被减数符号不同,则OF=1,否则OF=0
3、CF
加法判断
十进制:两无符号数相加,结果溢出,则CF=1,否则CF=0
溢出:结果超过该数据类型的表示范围,一般为0~2n-1,n为无符号整数的位数
二进制:无符号数的最高位进位为1时,CF=1,否则CF=0
减法判断
十进制:两无符号数相减,结果溢出,则CF=1,否则CF=0
溢出:结果超过该数据类型的表示范围,一般为0~2n-1,n为无符号整数的位数
简化判断:被减数小于减数字,如6-9,溢出
二进制:两无符号数字相减,最高位发生借位,则CF=1,否则CF=0