C语言初学的问题!求救
刚开始学谭浩强的C程序设计,书上用了一个小程序来演示整型数据的溢出,代码如下:
#include "stdio.h"
void main()
{
int a,b;
a = 32767;
b= a + 1;
printf("%d,%d",a,b);
getch();
}
结果是32767,-32768,说这是因为整型数据溢出而导致的,因为int型数据只有16位,只能表示到32767,再加一就溢出了,说是把b改成long可以解决这个问题,我上机试了一下,a,b全为int是结果确实是32767,-32768,但我把b改成long后仍然是这个结果,这是为什么呢?另外如果a,b全为long,则结果是32767,0,请高手指教!!
问题点数:20、回复次数:7Top
1 楼feny911(春韭秋菘)回复于 2006-03-19 20:10:50 得分 5
想不通是什么回事
请楼主说明一下你的编译环境,包括编译器、操作系统和CPU
Top
2 楼Shadow_boy(没事找事中)回复于 2006-03-19 20:28:15 得分 0
哦,我用的是TC3.0,不过TC2.0也不行,操作系统当然是windowsTop
3 楼ma100()回复于 2006-03-19 20:36:33 得分 15
%ld`Top
4 楼Shadow_boy(没事找事中)回复于 2006-03-19 20:41:49 得分 0
谢谢楼上的,我改了,但结果还是一样
void main()
{
int a;
long b;
a = 32767;
b= a + 1;
printf("%d,%ld",a,b);
getch();
}Top
5 楼Shadow_boy(没事找事中)回复于 2006-03-19 20:46:52 得分 0
我测试了一下,必须把a,b全部改成long型,然后用%ld的格式输出结果才不会错,这是什么原因呢?请指教Top
6 楼Shadow_boy(没事找事中)回复于 2006-03-19 20:56:31 得分 0
谢谢ma100() 的提醒,我总算明白了,由于a是int型的a+1仍然是int型,即-32768,然后赋给b,b为long,作符号扩展后仍然为-32768,谢谢各位的指教!!Top
7 楼feny911(春韭秋菘)回复于 2006-03-20 00:40:27 得分 0
但是再怎么样,b 也不可能输出 0 啊。
楼主是不是写错了?
Top




