C语言关于整型数据溢出的一个问题请教
我是一名C语言的初学者,最近在谭浩强先生的《C语言程序设计》中看到有一道关于整型数据溢出的例题(如下),#include<stdio.h>main(){inta,b;a=...
我是一名C语言的初学者,最近在谭浩强先生的《C语言程序设计》中看到有一道关于整型数据溢出的例题(如下),
#include <stdio.h>
main()
{ int a,b;
a=32767;
b=a+1;
printf(“%d,%d”,a,b);
}
这道题的运行结果为“32767,-32768”,现在我想得到b=32768的结果,根据书中的提示,将变量b改成long型可以得到预期的结果32768。我写的程序如下:
#include <stdio.h>
main()
{ long a,b;
a=32767;
b=a+1;
printf(“%d,%d”,a,b);
}
我在Turbo C上运行这个程序,得到的结果是“32767,0”,现在我不知道错误在哪里,恳请各位大侠不吝赐教,小月亮不胜感激!
非常感谢大家,我的问题才一天就有这么多人来为我解答。我通过将各位大侠的答案一一在turbo c2.0上运行。运行了如下的程序
#include <stdio.h>
main()
{ long a,b;
a=32767;
b=a+1;
printf("%ld,%ld",a,b); /*当然zjzl1001的写法也可以*/
}
输出的结果是“32767,32768”。部分回答者说在自己的机上运行能得到预期的结果,这可能是编译器的问题。所以shijp、WXD11011,zjzl11001的答案都是符合我的问题要求的,不过悬赏分只能给一个人,那就是第一个回答正确的,不好意思^-^总之小月亮非常谢谢大家帮我解决这个疑惑,以后有什么问题我会再来请教大家的!谢谢大家热情的帮助! 展开
#include <stdio.h>
main()
{ int a,b;
a=32767;
b=a+1;
printf(“%d,%d”,a,b);
}
这道题的运行结果为“32767,-32768”,现在我想得到b=32768的结果,根据书中的提示,将变量b改成long型可以得到预期的结果32768。我写的程序如下:
#include <stdio.h>
main()
{ long a,b;
a=32767;
b=a+1;
printf(“%d,%d”,a,b);
}
我在Turbo C上运行这个程序,得到的结果是“32767,0”,现在我不知道错误在哪里,恳请各位大侠不吝赐教,小月亮不胜感激!
非常感谢大家,我的问题才一天就有这么多人来为我解答。我通过将各位大侠的答案一一在turbo c2.0上运行。运行了如下的程序
#include <stdio.h>
main()
{ long a,b;
a=32767;
b=a+1;
printf("%ld,%ld",a,b); /*当然zjzl1001的写法也可以*/
}
输出的结果是“32767,32768”。部分回答者说在自己的机上运行能得到预期的结果,这可能是编译器的问题。所以shijp、WXD11011,zjzl11001的答案都是符合我的问题要求的,不过悬赏分只能给一个人,那就是第一个回答正确的,不好意思^-^总之小月亮非常谢谢大家帮我解决这个疑惑,以后有什么问题我会再来请教大家的!谢谢大家热情的帮助! 展开
7个回答
展开全部
long 型数据要加附加格式说明符 l 。
输出的格式:
printf("%ld,%ld",a,b);
注意,2个数都是用"%ld"格式输出,否则可能会得到意外的结果。
你可以试试用下面的几个语句依次替换printf(“%d,%d”,a,b);
1.printf("%d,%ld",a,b);
2.
printf("%d\n",a);
printf("%d\n",b);
3.
printf("%ld\n",a);
printf("%ld\n",b);
你会发现2,3的输出结果是一样的,而1的输出结果却不是预期的。
输出的格式:
printf("%ld,%ld",a,b);
注意,2个数都是用"%ld"格式输出,否则可能会得到意外的结果。
你可以试试用下面的几个语句依次替换printf(“%d,%d”,a,b);
1.printf("%d,%ld",a,b);
2.
printf("%d\n",a);
printf("%d\n",b);
3.
printf("%ld\n",a);
printf("%ld\n",b);
你会发现2,3的输出结果是一样的,而1的输出结果却不是预期的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该不会的,除非你的编译器的long型变量只有2个字节,我这里运行的结果是32767,32768,不是0。long至少有4个字节,32768怎么会溢出呢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
main()
{ long a,b;
a=32767;
b=a+1;
printf(“%f,%f”,a,b);
}
{ long a,b;
a=32767;
b=a+1;
printf(“%f,%f”,a,b);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
printf(“%d,%d”,a,b);
改为:
printf(“%d,%ld”,a,b);
改为:
printf(“%d,%ld”,a,b);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该不会吧
printf(“%ld,%ld”,a,b); 试试?
printf(“%ld,%ld”,a,b); 试试?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询