溢出概念与检测方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fengfeng0328/article/details/83244100

在定点整数机器中,数的表示范围|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位

猜你喜欢

转载自blog.csdn.net/fengfeng0328/article/details/83244100