溢出概念与检测方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

溢出概念与检测方法

在定点整数机器中,数的表示范围|x|<(2n-1)。在运算过程中如出现大于字长绝对值的现象,称为“溢出”。其中n是如何确定的呢?例如char 占1字节8位,则n=8。

两个正数相加,结果大于机器字长所能表示的最大正数,称为正溢;

两个负数相加,结构小于机器字长所能表示的最小负数,称为负溢;

我们在编写C语言底层代码时,为了节省计算机内存,会尽量使用占字节数较少的数据类型,而引发溢出问题。为了判断“溢出”是否发生,可使用“双符号位法”来判断是否溢出,使用双符号位法需要遵循以下两个规则:

1)两个符号位都看做数码一样参加运算;

2)两数进行以2n+2为模的加法,即最高符号位上产生的进位要丢掉;

具体使用方法:

1)x=+1100, y=+1000, 求x+y

解答:

x补=001100 y补=001100

x补+y补=010100

结论:两个符号位出现01,表示正溢出

2)x=-1100, y=-1000, 求x+y

解答:

x补=110100 y补=111000

x补+y补=101100(最高符号位进位已扔掉)结论:两符号位出现10,表示负溢出

举一个计算机编程中溢出的例子:

char a=127;

a++;

printf(“a=%d\n”,a);

答案:a=-128

提示:char数据类型占1字节8位

相关文档
最新文档