溢出概念与检测方法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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位