当前位置:首页 > 自我学习 > 正文内容

进位和溢出区别(进位与溢出有何异同)

2023-05-26 04:24:06自我学习1

进位与溢出有何异同

-54的补码是1-001010-30的补码是1-100010有两种方法解决:

1.扩增位数用七位数表示数字位,那么-54的补码是1-1001010-30的补码是1-1100010相加的话数字位运算结果会发生溢出,进位到符号位刚好变成1。两个正数相加溢出变成负数和两个负数相加溢出变成正数都可以这样解决。

2.双符号位表示法如果用两个位数来表示符号位-54的补码是11-001010-30的补码是11-100010结果符号位为110,最高位的1溢出变成10。

结果的符号位中高位(靠左边的那位)符号位永远是正确的,低位的不一定。

双符号位表示法中正数是00-xxxxxxx负数是11-xxxxxxx运算结果的符号位可能出现00,01,10,11四种情况,无论哪一种情况都可以直接根据符号位中的高位判断运算结果。

当运算结果的两个符号位不同时(01和10两种情况)说明发生了溢出,当运算结果的两个符号位相同时(00和11两种情况)说明没有溢出。

如果运算结果还需要参与其他运算需要先将符号位中的低位变成和高位一样才能参与运算。

溢出和进位有何区别和联系

处理器内部以补码表示有符号数,8个二进制位能够表达的整数范围是:+127 ~ -128,16位表达的范围是:+32767 ~ -32768.如果运算结果超出了这个范围,就是产生了溢出,有溢出,说明有符号数的运算结果不正确 例如: 3AH + 7CH=B6H,就是58 + 124=182,已经超出-128 ~ 127范围,产生溢出,所以OF = 1;另一方面,补码B6H表达真值是-74,显然运算结果也不正确。

溢出标志OF和进位标志CF是两个意义不同的标志.进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确。请看例子 例1:3AH + 7CH=B6H 无符号数运算:58+124=182,范围内,无进位 有符号数运算: 58+124=182 ,范围外,有溢出 例2:AAH + 7CH=(1)26H 无符号数运算:170+124=294,范围外,有进位 有符号数运算:-86+124=28 ,范围内,无溢出 处理器对两个操作数进行运算时,按照无符号数求得结果,并相应设置进位标志CF;同时,根据是否超出有符号数的范围设置溢出标志OF。应该利用哪个标志,则由程序员来决定。也就是说,如果将参加运算的操作数认为是无符号数,就应该关心进位;认为是有符号数,则要注意是否溢出。判断运算结果是否溢出有一个简单的规则:只有当两个相同符号数相加,而运算结果的符号与原数据符号相反时,产生溢出;因为,此时的运算结果显然不正确。其他情况下,则不会产生溢出。

进位 溢出

[方法一] Xf、Yf分别两个数的符号位,Zf为运算结果符号位。 当Xf =Yf =0(两数同为正),而Zf=1(结果为负)时,负溢出; 当出现Xf =Yf =1(两数同为负),而Zf=0(结果为正),正溢出. [方法二] Cs表示符号位的进位,Cp表示最高数值位进位,⊕表示异或。 若 Cs⊕Cp =0 ,无溢出; 若 Cs⊕Cp =1 ,有溢出。

进位与溢出有何异同,他们如何判断

OF是判断是否溢出通常和CF有关联,计算他最高是否有进位,有的话是1没有就是0。八位有高八位低八位之分,比如AX是十六位,AX有高八位AH.低八位AL,他们不相同

进位和溢出有何异同

溢出标志位是向上进位(或借位),所以叫溢出。

有进位一定发生溢出吗?有溢出一定产生进位吗?

会,若最高数值位向符号位的进位值与符号位产生的进位输出值不相同,则表明加减运算产生了溢出.

判断进位溢出的例题

方法

1、首先正数+负数不存在溢出,因为正数和负数首先是在可存储范围,相加后一定不会超过显示范围,of=0。

2、然后是2个正数相加,只要看最高位没有进位,有进位of=0,否则of=1。

3、两个负数相加,因为负数需要转换成补码计算,而且仅靠最高位不好判断,比如(-1)+(-1)=(-2)。

可以转换成十进制计算,8位存储可以显示范围(-128~127),只要计算结果是在范围之内就不会溢出,of=0,否则of=1。

总结:

判断溢出标志符号of方法:

1.正数和负数相加,of=0

2.正数相加,看最高位是否有进位

3.负数和负数相加,先换算十进制,看计算结果是否在存储的范围

进位与溢出的异同

"循环进位"应用于二进制的反码加减法运算。

1 + (-1) = 0001 + 1110 = 1111 = -0

2 + (-1) = 0010 + 1110 = 10000 = (循环进位) 0001 = 1

1 + (-2) = 0001 + 1101 = 1110 = -12 + 0 = 0010 + 1111 = 10001 = 0010 = 2

-1 + (-1) = 1110 + 1110 = 11100 = 1101 = -2

如上,两个正数相加,最高位进位位1表示溢出,不会再往上进。一正一负,若和为负,不会产生进位;若和为正,必会产生进位。观察两个加数绝对值的大小可以看出这一规律。两个负数相加,若不溢出,则会产生进位。

一正一负相加,和补码相比,负数的那个加数少加了一(只取反,没加一)。结果为负时,由于结果应是反码表示的负数,和补码相比,补码结果多加了一,恰好前面计算少加了一,因此结果是正确的反码。又知必然无进位,因此按"循环进位"法则计算没问题;结果为正时,少加的那个一就必须真正地加上了。又由上分析知会产生进位,就描述为"循环进位"。

两负数相加,与补码相比,少加了2。又因为结果是负数,抵消一个1。又因为必然有进位,所以按照"循环进位"是正确的。

因此,反码加法按照"循环进位"的法则来算才能保证其正确性

进位和溢出的计算方法

一、两个无符号整数相加减

对于两个w位宽的无符号整数来说,其能够表示的范围在0<=x<=2w次方-1。若溢出,那么这两个数相加的结果超过了该范围,则进位会被舍去,结果将小于运算中的任何一个整数。

如果两个无符号整数相减,若溢出,则结果将位于这两个整数之间。

二、两个有符号整数相加减

对于两个w位宽的有符号整数来说,其能够表示的范围在-2w-1次方<=x<=2w-1次方-1。若溢出,那么这两个数相加的结果超过了该范围,则进位会被舍去,结果将位于这个范围之内。

如果两个有符号整数相减,值得注意的是,作为减数的数的值为-128时(我们这里取整数为8 bits),结果是否溢出的判断则需特别处理。比如,-1-(-128),理论结果应该为127,结果未溢出;但是,实际上,+128(-(-128)的等效值)已经超出了127的最大表示范围了,已经溢出,不过,因为是中间结果,被忽略掉了罢了。事实上,溢出是存在的。所以,针对这类情况,我们在做是否溢出判断时,得格外小心。

本网站文章仅供交流学习 ,不作为商用, 版权归属原作者,部分文章推送时未能及时与原作者取得联系,若来源标注错误或侵犯到您的权益烦请告知,我们将立即删除.

本文链接:https://www.xibujisuan.cn/98862555.html

返回列表

上一篇:怎么化妆自然(怎么化妆自然最好看女)

没有最新的文章了...