判别溢出有哪几种方法

采用补码双符号位表示两个数相加后:双符号位:00--结果为正,无溢出01--结果正溢(算结果的时候,只把最高位当符号位,那么这个1就算如数值)10--结过负溢(既然为负,那么就求它的原码,(1不变,0变成1),求出数值)11--结果为负,无溢出.(求它的原码,(11不变),得到数值)

什么是补码加减运算溢出?判别溢出有哪几种方法?并我说明工作原理。~

对于加法来说,操作数符号可能是:
1. [正] + [正]2. [正] + [负]3. [负] + [正]4. [负] + [负]
对于减法来说:
1. [正] - [正] 相当于加法里的(2)2. [正] - [负] 相当于加法里的(1)3. [负] - [正] 相当于加法里的(4)4. [负] - [负] 相当于加法里的(3)
加法里,哪种操作会溢出?
对于一个有N位二进制的补码,其能表示的数字的范围是:
-2^(N-1) ~ +2^(N-1)-1
负数:-2^(N-1) 到 -1正数:1 到 2^(N-1)-1
那么对于加法来说:
“[正] + [负]”或者“[负] + [正]”永远都不会溢出,不管两个操作数取值多少,结果都落在有效范围内。
而超出有效范围的两种可能性就是:1. [正] + [正]2. [负] + [负]
那么再看这两种操作如果超出范围的话,表现形式是什么样的:
定义两个事件:
1. 最高有效位进位:对于N位补码,第N-1位发生了进位;2. 符号位进位:对于N位补码,第N位符号位发生;
定义4个边界值,以8位有效字长为例:最大正127 (0111 1111)最小正1 (0000 0001)最小负-128(1000 0000)最大负-1 (1111 1111)
列出所有组合(消除交换律重复)
符号位 最高有效位 是否发生溢出 最高有效位进位 符号位进位[最小正] + [最小正] 0 0 0 0 N N N[最小正] + [最大正] 0 0 0 1 Y Y N[最小正] + [最小负] 0 1 0 0 N N N[最小正] + [最大负] 0 1 0 1 N Y Y[最大正] + [最大正] 0 0 1 1 Y Y N[最大正] + [最小负] 0 1 1 0 N N N[最大正] + [最大负] 0 1 1 1 N Y Y[最小负] + [最小负] 1 1 0 0 Y N Y[最小负] + [最大负] 1 1 1 0 Y N Y[最大负] + [最大负] 1 1 1 1 N Y Y
所以,从规律上看凡是发生溢出操作,“最高有效位进位”和“符号位进位”必然是一个是Y另一个是N,凡是不发生溢出的操作,必然是两个全Y或者两个全N
这就是根据最高有效位和符号位发生进位的异或来判断是否溢出规律。
下面是逻辑证明环节,很绕,证明方法很简单,就是把几种条件都列出来判断一下即可:
[正]+[正]溢出,因为两个都是正整数,所以符号位都是0,溢出时最高位发生了进位,但因为符号位是0,0加上进位的1是永远不会发生进位的。所以对于前面定义的两个事件:“最高有效位进位”发生了,“符号位进位”未发生。
[正]+[负]不溢出时,此时设正数范围包括0:
如果结果为负整数,因为第二个操作数的符号位是1,结果的符号位也是1,那么“符号位进位”未发生,同时“最高有效位进位”也未发生。因为如果发生了,会产生一个进位1,与符号位1相加会倒是符号位变化,而此时符号位是不变的,所以可以肯定两个事件都没有发生。
如果结果为正整数,那么必然同时发生了“最高有效位进位”和符号位进位”,因为第二个操作数的符号位是1,但结果符号位是0,所以符号位有进位(1 + 0 + X = 10)。而第一个操作数的符号位又是0,所以必然是最高有效位产生了一位进位才让符号位获得了一个1才能进位,对于符号位的计算来说[正]符号位0 + [负]符号位1 + 最高有效位进位X = 10,X必然是1
[负]+[负]溢出,因为两个都是负整数,所以符号位都是1,溢出时符号位发生了进位(两个都是1)。再看最高有效位是否有进位,对于8位的负数加法来说,产生溢出,意味着结果范围在-129~-256之间,这个范围内的二进制数,以9位补码来看,就是1 0111 1111到1 0000 0000,那么这两个数如果减掉符号位相加的1 0000 0000的话,得到的结果就是 0111 1111到0000 0000,这个范围内的数字第8位都是0,所以从符号位的计算可以得知[负]符号位1 + [负]符号位1 + 最高有效位进位X = 10,最高有效位的进位值必然是0,所以最高有效位必然没有发生进位。
参考资料
知乎:https://www.zhihu.com/question/22199029?sort=created

补码加减运算的结果超出原先字长位数补码所表示数值范围,称作"溢出"。判别溢出的三种方法,请看附件。

#17781822478# 计算机基本运算中,补码运算怎样判断数值是否有溢出? - ******
#刘琪#[答案] 追问:那请你进行这运算并判断是否有溢出 -75-64 .回答:溢出了.如果题目直接给的数字,那么你直接计算开是否超出正127或者负128就可以了. 当然,如果你想用计算机那种方法来判断也是可以的,把两个数字转换成二进制 发现相加有进位(减法...

#17781822478# 定点数运算方法及溢出判别方法?定点数运算方法及溢出判别方法 ******
#刘琪# 根据运算结果可以方便的判断是否溢出是对的,但是不是这样做的主要目的.(有其它的判断是否溢出的方法.) 使用变形补码的主要目的是在溢出的时候,第一符号位仍然能指示结果的正确符号.

#17781822478# 如何判断二进制溢出 - ******
#刘琪# 溢出,在用二进制进行加减计算的时候,要看“最高位的进位”就“次高位的进位”. 这两个进位,如果相同,则无溢出.设两个8位补码表示的数b7b6b5b4b3b2b1b0和a7a6a5a4a3a2a1a0相加, 把b7 + a7的进位称为C7,把b6 + a6的进位称为C6, 那么,C7、C6,如果不同,就是溢出了.楼主给出的题目如下,依据这些,是不能判断溢出的,因为其中并没有“次高位的进位”.溢出(b7,a7为符号标记),则____ A.b7与a7的逻辑或结果一定是1 B.b7与a7的逻辑与结果一定是为0 C.b7与a7的逻辑异或结果一定为1 D.b7与a7的逻辑异或结果一定0;答案为D,你们看下,

#17781822478# ...若最高数值位向符号位的进位值与符号位产生的进位输出值不相同,则表明加减运算产生了溢出.但是为什么可以用这种方法判断呢?这种方法的原理是什么? - ******
#刘琪#[答案] 5.2.2 溢出及补码溢出的判断 无论采用何种机器数,只要运算的结果大于数值设备所能表示数的范围,就会产生溢出. 溢出现象应当作一种故障来处理,因为它使结果数发生错误.异号两数相加时,实际是两数的绝对值相减,不可能产生溢出,但有可...

#17781822478# 两个无符号数相乘,怎样判断是否溢出 - ******
#刘琪# 对于2个无符号数判断溢出用进位标志CF判断有符号的整数用OF判断

#17781822478# 汇编中溢出所谓的按次高和最高的进位来判断是怎么回事?可不可以用最详细的方法解释一下? - ******
#刘琪# 不一定.进位是指最高位进1,溢出是指最高位和次高位进位不一样.进位表示无符号数运算超范围,溢出表示有符号数超范围.溢出可分3中情况分析,以加法为例:1.都是正数,最高位都是0,如果次高位进位,结果最高位为1,因为是补码运算,即结果是负数,出错.2.一正一负,永远不会出错,最高位一个1一个0,结果次高位进位最高位就会进位,永远不溢出.3.2个负数,最高位都是1,最到位肯定进位,如果不进位最高位结果为0正数,不对.所以溢出是补码运算结果超出表示范围的意思.11111111-1+11111111-1--------------111111110-2进位不溢出.

#17781822478# 如何确定由两个补码表示的有符号数在做加减法运算时产生溢出? - ******
#刘琪# 补码加法运算溢出判断三种方法:1. Xf、Yf分别两个数的符号位,Zf为运算结果符号位.当Xf =Yf =0(两数同为正),而Zf=1(结果为负)时,负溢出;当出现Xf =Yf =1(两数同为负),而Zf=0(结果为正),正溢出. 2. Cs表示符号位的进位...

  • 如何判断二进制溢出?
  • 答:在用二进制进行加减计算的时候,要看“最高位的进位”就“次高位的进位”。 这两个进位,如果相同,则无溢出。若不同,则溢出。拓展:在几乎所有计算机语言中,不管是新的语言还是旧的语言,使缓冲区溢出的任何尝试通常都会...

  • 汇编8086中的OF溢出标志怎么判断?它的准确定义是什么?
  • 答:知道了这些,判断是否溢出,就很容易了。CPU 每次做完运算,就会给出结果和“进位标志位 CF”和“溢出标志位 OF”。如果 OF=1,就代表:刚刚做的计算,发生了溢出。人工判断是否溢出,有如下六个方法。一、无符号数的运算...

  • 如何判断整数数据的溢出
  • 答:机器的cpu,加法运算将设置一个内部寄存器为四种状态:正,负,零和溢出。在这种机器上,c编译器完全有理由实现以上 的例子,使得a+b返回的不是负,而是这个内存寄存器的溢出状态。显然,if的判断会失败。一种正确的方式是将...

  • 汇编OF溢出标志怎么判断啊!
  • 答:计算机实际是检查最高两位的进位是否相同来判断的。如果进位相同,不溢出,不同则溢出。计算机通过两个进位异或运算决定of的值的,下面给与证明。两个补码相加,1.对于最高位都是1的相加,最高位必然有进位,最高位如果变为...

  • 计算机基本运算中,补码运算怎样判断数值是否有溢出
  • 答:这两个正数相加之后,将会得出128,却是个负数。在 -128 上,再加上-1,也超范围,也会溢出。这两个负数相加之后,将会得出 127,这是个正数。补码计算出现了溢出,最重要的特征是:符号不正确。你只要判断符号正确与否...

  • 计算机中二进制加减法时,是如何判断溢出的?
  • 答:设两个8位补码表示的数b7b6b5b4b3b2b1b0和a7a6a5a4a3a2a1a0相加,把b7 + a7的进位称为C7,把b6 + a6的进位称为C6,那么,C7、C6,如果不同,就是溢出了。楼主给出的题目如下,依据这些,是不能判断溢出的,因为...

  • 汇编语言溢出和进位的判断
  • 答:而溢出标志位要跟据操作类型、进位标志、以及运算结果的符号位变化来确定置位或复位。即两个操作数运算时:○ 符号不同加法: 必无溢出;○ 符号相同加法: 无进位, 无符号改变→无溢出;○ 符号相同加法: 有进位→溢出;○ ...

  • 两个二进制有符号数(10111010)与(1101001)相加,结果是什么是否溢出
  • 答:溢出的判别:计算机中判别溢出的方法通常采用双高位判别法。双高位判别法利用符号位及最高数值位的进位情况来判断是否发生了溢出。为此,需引进两个符号: Cg和Cp.Cs:若符号位发生进位,则Cs=1;否则Cs=0。Cp:若最高数值位...

  • 单片机程序状态字PSW的OV位到底是怎么判断溢出的?
  • 答:D4、D3位合在一块儿,指明工作寄存器的组别,这主要用于比较复杂一些的程序,R0组寄存器不够用的情况下用到R1、R2、R3组的寄存器时要用到这二位。怎么判断正负吧。就是C位。考虑溢出-128-1单片机的计算方法为先把1和128...

  • 什么叫做单片机中的“溢出标志”?
  • 答:0V——溢出标志,对于单字节的有符号数,若用最高位(b7)表示正、负号,则只有7位有效数位(b6~b0),能表示-128~+127之间的数。运算结果超出了这个数值范围,就会发生溢出,此时0V=1,否则0V=0。此外,在执行乘法...

    为传递更多家电数码信息,若有事情请联系
    数码大全网