溢出标志位OF与进位标志位CF判断
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效