⑴ 在定点 运算中,为了判断溢出是否发生,可采用双符号位检测法,不论溢出与否
溢出判断,一般用双符号位进行判断:
符号位00
表示正数
11
表示负数
结果的符号位为01时,称为上溢;为10时,称为下溢
设x和y是4位的有符号数,x=7,y=-7,符号位为双符号位
用补码求x+y,x-y
[x]补+[y]补=00
111+11
001=0
0000结果不溢出
[x-y]补=[x]补+[-y]补=00
111+00
111=0
1110结果上溢出。
同理,可以判断x,y为其他位数的补码运算溢出。
⑵ 如何确定由两个补码表示的有符号数在做加减法运算时产生溢出
补码加法运算溢出判断三种方法:
Xf、Yf分别两个数的符号位,Zf为运算结果符号位。当Xf =Yf =0(两数同为正),而Zf=1(结果为负)时,负溢出;当出现Xf =Yf =1(两数同为负),而Zf=0(结果为正),正溢出。
Cs表示符号位的进位,Cp表示最高数值位进位,⊕表示异或。若 Cs⊕Cp =0 ,无溢出;若 Cs⊕Cp =1 ,有溢出。
用变形补码进行双符号位运算(正数符为00,负数符号以11)。若运算结果的符号位为"01",则正溢;若结果双符号为10,则负溢出;若结果的双符号位为00或11,无溢出。
⑶ 计算机中二进制加减法时,是如何判断溢出的
溢出是在有符号运算中出现的,异号运算OF=0,同号运算 OF=1。
溢出,在用二进制进行加减计算的时候,要看“最高位的进位”就“次高位的进位”。
这两个进位,如果相同,则无溢出。
设两个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
(3)加法溢出有哪些判断方法扩展阅读:
在几乎所有计算机语言中,不管是新的语言还是旧的语言,使缓冲区溢出的任何尝试通常都会被该语言本身自动检测并阻止(比如通过引发一个异常或根据需要给缓冲区添加更多空间)。但是有两种语言不是这样:C 和 C++ 语言。C 和 C++ 语言通常只是让额外的数据乱写到其余内存的任何位置,而这种情况可能被利用从而导致恐怖的结果。
更糟糕的是,用 C 和 C++ 编写正确的代码来始终如一地处理缓冲区溢出则更为困难;很容易就会意外地导致缓冲区溢出。除了 C 和 C++ 使用得 非常广泛外,上述这些可能都是不相关的事实;例如,Red Hat Linux 7.1 中 86% 的代码行都是用 C 或 C ++ 编写的。因此,大量的代码对这个问题都是脆弱的,因为实现语言无法保护代码避免这个问题。
⑷ 针对定点小数加法运算,分析 产生溢出的原因,并给出两种溢出的方法
(1)产生“溢出”的原因:
当最高有效数值位的运算进位与符号位的运算进位不一致时,将产生运算“溢出”。 当最高有效位产生进位而符号位无进位时,产生上溢; 当最高有效位无进位而符号位有进位时,产生下溢。
(2)“溢出”检测方法:
为了判断“溢出”是否发生,可采用两种检测的方法。
第一种方法:采用双符号位法, 称为“变形补码”或“模4补码”,可使模2补码所能表示的数的范围扩大一倍
第二种溢出检测方法:采用“单符号位法”。当最高有效位产生进位而符号位无进位时,产生上溢;
⑸ 两数的补码相加减有几种方法判别溢出, help啊!
判断溢出,有三种方法:
1.由人进行计算,并判断:正+正=负、负+负=正、...,这就是溢出。
2.由CPU进行计算,由人观察标志位:OV=1,就是溢出。
3.由CPU进行计算,并给出溢出标志位:C7异或C6,为1,就令OV=1。
⑹ 溢出的判断方法
溢出判断方法一
用Xf和Yf表示被加数和加数补码的符号位,Zf为补码和的符号位.当出现Xf = Yf= 0两数同为正,而Zf为负,即Zf=1时,有上溢.当出现Xf =Yf = 1两数同为负,而Zf为正,即Zf= 0时,有下溢.
溢出判断方法二
当数值最高位有进位位C1=1,符号位没有进位C0=0时,或当数值最高位没有进位位C1=0,符号位有进位C0=1时,结果有溢出.
溢出判断方法三:
用变形补码进行双符号位运算.在变形补码中,正数符号以"00"表示,负数的符号以"11"表示.一般称左边的符号位为第一符号位,右边的符号位为第二符号位.若运算结果的符号位为"01",则表明有正溢出产生.若运算结果的符号"10",则表明有负溢出产生.
⑺ 定点数加减运算的溢出判定,可以通过______和______的方法判定。
定点数加减运算的溢出判定,可以通过___单符号位判溢方法 ___和___双符号位进位判溢方法 ___的方法判定。
定点数加减
目前计算机普遍使用补码实现定点数的加减运算。
1.加减运算方法:
根据补码的设计规则,任意的绝对值相同的负数和正数,负数是正数的反码加1,所以绝对值相同的负数和正数相加,刚刚好结果就是为全0(最高位进一位,抛弃)。然后对照下补码表,可以发现基于这种设计,两数相加时可以直接将符号位也参与运算,得出的结果也包含符号位。
2.溢出判断:
(1)单符号位判溢方法
相加溢出的情况只有两种:
正数和正数相加,结果为负数,发生溢出。
负数和负数相加,结果为正数,发生溢出。
为什么正数和负数相加不会溢出呢?是因为正数和负数的最值的绝对值都是相同的,正负相加结果一定在绝对值之内。
相减只是将加数取补码再相加,所以知道相加溢出就够了。
(2)进位判溢方法(单符号位)
由补码表观察可以知道:
不溢出的情况:
一个绝对值较大的负数和绝对值较小的正数相加,最高有效位(即最高的数值位)不会发生溢出,因此符号位也没有进位。
一个绝对值较小的负数和绝对值较大的正数相加,最高有效位溢出,且使得符号位由1变10(0)进位。
溢出的情况:
上面已经知道:
正数和正数相加,结果为负数,发生溢出。→这种情况是最高有效位进位,而符号位由0变1无进位。
负数和负数相加,结果为正数,发生溢出。→这种情况是最高有效位不进位,而符号位由1变10(0)进位。
所以当最高有效位和符号位的进位不同时,就表明发生了溢出。
(3)双符号位进位判溢方法
采用双符号位(00、11)进行相加,上面已经知道:
所以当最高有效位和符号位的进位不同时,就表明发生了溢出。
→符号位进位,最高有效位不进位就变成了11+11=10(110)。此时为负溢出。
→符号位不进位,最高有效位进位就变成了00+1=01。此时为正溢出。
⑻ 计算机运算时是如何判断发生溢出的
要通过计算机运算,就先的申请计算机内存,存储数据,申请的时候数据有数据类型,数字的话用int类型举例把,int在不同的语言中他占用的内存是不同的,就以c语言为例,是占用8个字节,在计算机中是以2进制表示(00000000 00000000)共8位(最高位是0代表正数,1则是负数);2个数相加就是2个16位的2进制相加,比如01000000 00000000(16384)+01000000 00000000(16384)=10000000 00000000 ;这就溢出了,因为最高位是符号位,1代表负数;大概是这样把,不知道有错的没,呵呵
⑼ 如何检查补码加减运算中的溢出问题
通常有三种表述方式(说法):
(1) 两个符号相同的补码数相加,如果和的符号与加数的符号相反,或两个符号相反的补码数相减,差的符号与减数的符号相同,都属于运算结果溢出.这种判别方法比较复杂,要区别加还是减两种不同运算情况,还要检查结果的符号与其中一个操作数的符号的同异,故很少使用;
(2) 两个补码数相加减时,若最高数值位向符号位送的进位值与符号位送向更高位的进位值不相同,也是运算结果溢出.
(3) 在采用双符号位(如定点小数的模4补码)运算时,若两个符号位的得值不同(01或10)则是溢出.01表明两个正数相加,结果大于机器所能表示的最大正数,称为"上溢";10表明两个负数相加,结果小于机器所能表示的最小负数,称为"下溢";双符号位的高位符号位,不管结果溢出否,均是运算结果正确的符号位,这个结论在乘法运算过程中是很有实际意义的.请注意,在采用双符号位的方案中,在寄存器和内存储器存储数据时,只需存一位符号,双符号位仅用在加法器线路部分.
再次强调,这三种不同说法是对同一个事实的略有区别的表述,实现时用到的线路可以有所区别,但问题的实质是完全一样的.
⑽ 如何判断两个补码表示的有符号数在做加减法运算时产生溢出
补码加法运算溢出判断三种方法:
[方法一]
Xf、Yf分别两个数的符号位,Zf为运算结果符号位。
当Xf =Yf =0(两数同为正),而Zf=1(结果为负)时,负溢出;
当出现Xf =Yf =1(两数同为负),而Zf=0(结果为正),正溢出.
[方法二]
Cs表示符号位的进位,Cp表示最高数值位进位,⊕表示异或。
若 Cs⊕Cp =0 ,无溢出;
若 Cs⊕Cp =1 ,有溢出。
[方法三]
用变形补码进行双符号位运算(正数符为00,负数符号以11)
若运算结果的符号位为"01",则正溢;
若结果双符号为10,则负溢出;
若结果的双符号位为00或11,无溢出。