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的变化
- 二进制数的加减运算会导致OF和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
- 减法判断
- 十进制:两无符号数相加,结果溢出,则CF=1,否则CF=0
- 溢出:结果超过该数据类型的表示范围,一般为0~2n-1,n为无符号整数的位数
- 简化判断:被减数小于减数字,如6-9,溢出
- 二进制:两无符号数字相减,最高位发生借位,则CF=1,否则CF=0
- 十进制:两无符号数相加,结果溢出,则CF=1,否则CF=0
标签:标志,符号,二进制,CF,进位,2n,溢出 From: https://www.cnblogs.com/FishSmallWorld/p/17161883.html