A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邱蚓 中级黑马   /  2014-6-15 22:24  /  1759 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#include<stdio.h>
void main(void)
{
int a=32767;
printf("32767+1=%d",32767+1);

}
今天一個朋友說想考考我,問我最終結果是多少,很明顯應該是32768啦,但是運行結果確是-32768,是代碼哪裡有錯誤嗎?還是哪裡不對呢?求告知

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

11 个回复

倒序浏览
int型变量的数值范围是-32768~32767
回复 使用道具 举报
运行结果为32767+1=32768。
回复 使用道具 举报
看了你这个运行结果,难道溢出了输出结果就会从负的开始
回复 使用道具 举报
本帖最后由 Emy♪ 于 2014-6-16 09:41 编辑

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

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

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

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

这是个朋友给的题,想考察一下我,所有可能他自己没注意到吧,你的答复很详细,谢啦
回复 使用道具 举报
Emy♪ 中级黑马 2014-6-17 07:33:59
9#
邱蚓 发表于 2014-6-16 22:25
这是个朋友给的题,想考察一下我,所有可能他自己没注意到吧,你的答复很详细,谢啦 ...

:lol:lol:lol:lol  我也是菜鸟,大家一起加油!
回复 使用道具 举报
Emy♪ 发表于 2014-6-17 07:33
我也是菜鸟,大家一起加油!

你现在学到什么程度啦?学完C语言了吗?
回复 使用道具 举报
邱蚓 发表于 2014-6-17 10:35
你现在学到什么程度啦?学完C语言了吗?

还没。。。 蛋疼。:'(
回复 使用道具 举报
Emy♪ 发表于 2014-6-17 13:13
还没。。。 蛋疼。

我也是,一起加油,哈哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马