欢迎来到天天文库
浏览记录
ID:41956252
大小:36.19 KB
页数:4页
时间:2019-09-04
《二进制带符号数的溢出问题剖析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、二进制带符号数的溢出问题剖析①对于二进制数的溢出,只是针对带符号数的溢出,无符号虽然也受机器位的限制,但是并无溢出这个概念;②负数在运算过程中采収补码运算,但是结果仍然要转换成原码,即补码的补码所得,例如,・5原码表示1101;但是参与运算时必须转换成1011;・5+1为1011+0001=1100;1100即为・4,貌似是正确的,但是1100还要转换成原码,即110(),结果与不转换一样,哈哈,没办法啊,哈哈。请看详解计算机字长为n位,而两个二进制数x与y的补码相加([x]补+[y]补)的结果超过了门位,则实际的运算结果应为[x]补+[y]补-2",也就是说运
2、算结果中最高位(TJ无法保存,自动丢失。例如:例1:设“=一1000011°=-0100001,求x+y=?解![x]补=1,0111101+[y]补=1,1011111[x]补+[y]
3、h=11,0011100t丢失即:[x+y]补=[x]补+[y]补=11,0011100-1,0000000=1,0011100求得:x+y=1100100=J在计算机中,每种数据编码都有其数据表示范围,在运算过程中如出现数据超岀这个范围的现象,就发生了溢出。发生溢出时,运算结果就不再是正确的。对于加法,只在正数加正数和负数加负数两种情况下才会产生溢岀。符号不同的两个数相加是不
4、会产生溢岀的。对于昨,只在正数减负数和负数减正数两种情况下才会产生溢出,。符号相同的两个数相减是不会产生溢岀的。因此,在判断溢出时可根据参加运算的两个数据的符号位进行:两个符号相同的补码相加,如果和的符号位与加数的符号位相反,则表明运算结果溢岀;两个符号位相反的补码相减,如果差的符号位与被减数的符号位相反,则表明运算结果溢出。符号不同的两个数相加不会产生溢出的原因是字长为n+1位时,数值部分为n位,数值部分的最大绝对值为2鷺如果参加运算的两上数x和y的绝对值都小于2门.则(十x)+(-y)和(一x)+(+y)的绝对值都不会大于2J因此只需考虑(+x)+(-y)秋
5、-x)十(-y)的情况即可,现举例如下:例2:设只=+1000101,y=+1100111,求x+y=?解:[x]补二0,1000101+[y]
6、h=0,1100111[x]补+[y]补=1,0101100即:[x+y]补丄tx]补[y]补=1,0101100x十y=-1010100显然,该结果错误的,因为两个正数相加,其值不可能是负数。由本例可如,真值X的y所表示的十进制数分别为(+69)10和(+103)10其和应为(+172冶,而计算机字长为8位(其中1位是符号位),可表示的最大正数为(+127)心故结果超出了计算机数据的表示范围,发生了溢岀。
此文档下载收益归作者所有