黑马程序员技术交流社区

标题: 運行結果不正確? [打印本页]

作者: 邱蚓    时间: 2014-6-15 22:24
标题: 運行結果不正確?
#include<stdio.h>
void main(void)
{
int a=32767;
printf("32767+1=%d",32767+1);

}
今天一個朋友說想考考我,問我最終結果是多少,很明顯應該是32768啦,但是運行結果確是-32768,是代碼哪裡有錯誤嗎?還是哪裡不對呢?求告知
作者: ゞ导火索゛    时间: 2014-6-15 22:40
int型变量的数值范围是-32768~32767
作者: lewisen    时间: 2014-6-15 23:14
运行结果为32767+1=32768。
作者: Littlekin    时间: 2014-6-16 07:34
看了你这个运行结果,难道溢出了输出结果就会从负的开始
作者: Emy♪    时间: 2014-6-16 09:38
本帖最后由 Emy♪ 于 2014-6-16 09:41 编辑

首先,我是新手。但是我得指明你程序的一个错误。你printf输出的那段,直接把32767+1输出,那你之前定义的a有什么意义?程序完全没有用到。

然后,int型变量的数值范围是-32768~32767。(即1111111111111111~0111111111111111),a(内存表示为0111111111111111)加1后产生溢出,各位均向前进一位,所以a中存储的数字就为1111111111111111,就是-32768了。最高位表示符号位(0表示为正,1表示为负)。

希望能帮到你。
作者: 夏沫的黄昏′    时间: 2014-6-16 16:02
我唯一能说的就是 进入21世纪以后  咱们用的gcc 编译器  -32768~32767是short的范围   int的范围是-2147483648~2147483647  。
还有 看到你用void main(void)  我感觉你应该是用的很老版本的编译器  
现在的编译器 这样是不通过编译的   
既然要学c语言  还是跟上时代的脚步吧。
作者: 邱蚓    时间: 2014-6-16 22:23
夏沫的黄昏′ 发表于 2014-6-16 16:02
我唯一能说的就是 进入21世纪以后  咱们用的gcc 编译器  -32768~32767是short的范围   int的范围是-2147483 ...

这是一个朋友给的题,他就说想考我一下,不过你说的对,要跟上时代
作者: 邱蚓    时间: 2014-6-16 22:25
Emy♪ 发表于 2014-6-16 09:38
首先,我是新手。但是我得指明你程序的一个错误。你printf输出的那段,直接把32767+1输出,那你之前定义的a ...

这是个朋友给的题,想考察一下我,所有可能他自己没注意到吧,你的答复很详细,谢啦
作者: Emy♪    时间: 2014-6-17 07:33
邱蚓 发表于 2014-6-16 22:25
这是个朋友给的题,想考察一下我,所有可能他自己没注意到吧,你的答复很详细,谢啦 ...

:lol:lol:lol:lol  我也是菜鸟,大家一起加油!
作者: 邱蚓    时间: 2014-6-17 10:35
Emy♪ 发表于 2014-6-17 07:33
我也是菜鸟,大家一起加油!

你现在学到什么程度啦?学完C语言了吗?
作者: Emy♪    时间: 2014-6-17 13:13
邱蚓 发表于 2014-6-17 10:35
你现在学到什么程度啦?学完C语言了吗?

还没。。。 蛋疼。:'(
作者: 邱蚓    时间: 2014-6-17 21:16
Emy♪ 发表于 2014-6-17 13:13
还没。。。 蛋疼。

我也是,一起加油,哈哈




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2