溢出标志位OF与进位标志位CF判断

1、OF与CF概述

  1. OF(Overflow Flag,溢出标志位):有符号数之间加减运算的溢出标志
  2. CF(Carry Flag,进位/借位标志位):无符号数之间加减运算的溢出标志
  3. 快速判断(加法)(减法可转换为加法) 
    • 有符号数的符号位进位最高位进位不同时,OF=1,否则OF=0(记忆:0+0必然不溢出,此时符号位和最高位的进位相同,均为0)
    • 无符号数的最高位进位为1时,CF=1,否则CF=0
    • 对有符号数而言(要求两个数都是有符号数),
      • 同号相减,不溢出,OF=0
      • 异号相加,不溢出,OF=0
    • 对无符号数而言(要求两个数都是无符号数),
      • 大减小,不溢出,CF=0
      • 小减大,溢出,CF=1
  4. 注意
    • 二进制数的加减运算会导致OF和CF变化
      • 原因:整数的加减运算没有本质上的不同,都是二进制数字间进行加减运算
      • 虽然说OF是与有符号数有关,但无符号数进行运算时,OF也会被改变,但此时OF无意义,没人在乎他
      • 同理,有符号数运算时,CF也会相应发生变化,我们也不关心CF的变化
  5. 小tips
    • 减法转换为加法,直接用二进制算,从而可方便地判断溢出:[x]-[y]=[x]+[-y]

2、OF

  1. 加法判断
    • 异号数相加,必然不溢出,OF=0
    • 十进制:两有符号数相加,结果溢出,则OF=1,否则OF=0
      • 溢出:结果超过该数据类型的表示范围,一般为-2n-1~2n-1-1,n为有符号整数的位数
    • 二进制:同号有符号数相加,若结果与它们符号不同,则OF=1,否则OF=0
  2. 减法判断
    • 同号数相减,必不溢出 
    • 十进制:若有符号数相减,结果溢出,则OF=1,否则OF=0
      • 溢出:结果超过该数据类型的表示范围,一般为-2n-1~2n-1-1,n为有符号整数的位数
    • 二进制:异号有符号数相减,结果与被减数符号不同,则OF=1,否则OF=0

3、CF

  1. 加法判断
    • 十进制:两无符号数相加,结果溢出,则CF=1,否则CF=0
      • 溢出:结果超过该数据类型的表示范围,一般为0~2n-1,n为无符号整数的位数
    • 二进制:无符号数的最高位进位为1时,CF=1,否则CF=0
  2. 减法判断
    • 十进制:两无符号数相减,结果溢出,则CF=1,否则CF=0
      • 溢出:结果超过该数据类型的表示范围,一般为0~2n-1,n为无符号整数的位数
      • 简化判断:被减数小于减数字,如6-9,溢出
    • 二进制:两无符号数字相减,最高位发生借位,则CF=1,否则CF=0

 

posted @ 2023-02-27 21:32  尚方咸鱼  阅读(4787)  评论(0编辑  收藏  举报