C语言整型溢出问题

来源:百度知道 编辑:UC知道 时间:2024/05/17 23:05:52
有一道题是:
#include<stdio.h>
void main()
{
int x,y,i;
long z,a;
scanf("%d,%d",&x,&y);
for(z=1,i=1;i<=y;i++) z=z*x;
printf("%d",z);
}
我想如果整型溢出后就输出"error"请问要怎么写?谢谢!
前三个回答都试过了,全不可取.

首先,C语言只要求long型数据长度不短于int型,short型不长于int型,并没有规定以上各数据类型所占内存的字节数,具体要看你是在哪个编译器下编译的而定;然后,z是long型,输出格式不应该是%ld吗?#如果确认了所用编译器和你所写的无误后,具体可以用if语句判断一下。附:用TurboC/TurboC++时:int(系统默认是有符号的,下同)-32768~32767;long:-2147483648~2147483647

如果溢出(即超出了long的范围),z将变为小于0的一个数~~所以可以如下操作:
if(z<0) printf("error \n") ;
else
printf("%d\n",z);

#include<stdio.h>
void main()
{
int x,y,i;
long z,a;
scanf("%d,%d",&x,&y);
for(z=1,i=1;i<=y;i++)
z=z*x;
printf("%ld",z);
}

据我所知用C语言是不可以的
除非C里面可以加入汇编的代码

if(z > 2147483647)
长整型的范围-2147483647至2147483647