500*500的结果是250000,换成16进制是0x3D090,-12144正好是0xD090,显然是溢出了。
int在tc这样的16位编译器中是2个字节,可存储的最大值是0x7FFFF,就是32767,250000肯定溢出。
因为500被编译器认为是int类型,两个int运算的结果还是int,将溢出后的结果0xD090赋值给long类型后就是0xFFFFD090,也是-12144。解决办法是换一个32位的编译器如vc,dev-cpp,int是4个字节已经够用了。不换编译器改程序也行:
int main(void)
{
long int a;
a=500L*500L; /*告诉编译器500是long类型*/
printf("%ld ",a);
getch();
return 0;
}
[此贴子已经被作者于2007-8-25 10:55:00编辑过]