2147483644
2147483645
2147483646
2147483647
-2147483648
-2147483647
-2147483646
-2147483645
-2147483644
-2147483643
-2147483642
这个是我写的可以判断溢出的加法函数:
#include <stdio.h>
int uoadd (int a,int b,int *overflow)
int overflow
int main ()
{
int a=2147483647-9,b=10,c=0
c=uoadd(a,b,&overflow)
if (overflow == 1)
printf ("溢出!\n")
else
printf ("%d\n",c)
return (0)
}
int uoadd (int a,int b,int *overflow)
{
*overflow=0
if (a>0 &&b>0 &&a+b<0) *overflow=1
if (a<0 &&b<0 &&a+b>0) *overflow=1
return (a+b)
}
VC6编译,新建工程的时候选控制台程序
其实其他的应用程序可能会内置判断溢出的东西,比如VB就会判断,如果数据溢出了就会弹出一个对话框,其他的就不知道了
其实这个东西用汇编解决相当容易了,但考虑到可读性还是用C比较好
一般在工作中会根据实际情况考虑使用合适的数据类型。比如你要存储一个省的人数,你就不能去选择char型,而应该选择int或者能存储更大数据的类型。所以通常是通过选择合适数据类型来避免溢出。
如果非得判断数据是否溢出,我给你一个方法。通过将其扩大到一个大的数据类型然后进行数据溢出判断。
eg:
char a = X //X是随机数据
int b = a * Y//Y是随机数据
if( b <-128 || b >127) 对于a这种char类型来说则溢出。
#include <stdio.h>int main()
{unsigned int a=0,c,n,c1,i
scanf("%u",&n)
c=1
for(i=1i<=ni++)
{c*=i
if(c<c1)
{printf("unsigned int最大可以计算%u以内的阶乘。\n%u!=%u\ns(%u)=%u",i-1,i-1,c1,i-1,a)
break
}
a+=i
c1=c
}
return 0
}