鱼C论坛

 找回密码
 立即注册
查看: 2326|回复: 2

初学C-几个入门问题

[复制链接]
发表于 2012-6-1 09:43:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1、用的谭浩强的C教材,第三章讲到整型数据时候有个例子(例3.3):
  1. main()
  2. {
  3. int a,b;
  4. a=32767;
  5. b=a+1;
  6. printf("%d,%d\n",a,b);
  7. }
复制代码
int整型表示的数字范围是-32768~32767.(16位),按正常的理解,这段程序中b=a+1后,数学结果应为32768,可32768超出了int型有符号数能表示的数字范围。那么,对于计算机来说,正确的结果应该为b=-32768。书中的说明也的确如此。事实上,在计算机内存中对正确的数学结果32768和正确的计算机逻辑结果-32768的存储形式都是一致的:1000 0000 0000 0000.
可我用VC++6对该段程序编译运行后的结果却是32767,32768.
这个是什么原因呢?定义的b是有符号型的int,运行结果中的b不就应该是-32768么?
2、例3.5
  1. main()
  2. {printf("%f\n",356.);
  3. printf("%f\n",356);
  4. printf("%f\n",356f);
  5. }
复制代码
在VC6中编译出现错误,提示:
warning C4013: 'printf' undefined; assuming extern returning int
error C2059: syntax error : 'bad suffix on number'
error C2146: syntax error : missing ')' before identifier 'f'
error C2059: syntax error : ')'

如果把最后一句去掉,编译没有问题,但运行结果是356.000000和0.000000.这又是怎么回事呢?

麻烦大家帮忙解答一下,谢谢了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-1 11:39:54 | 显示全部楼层
沙发来了,第一个问题我用win-tc编译后的结果为 -32768,如果你在vc中用内存查看到的数据是1000 0000 0000 0000的话,而且保证定义的是 signed int的话,那么结果应该是-32768,我记得vc是32为的操作系统,其int类型是占据4个字节的,是不是因为这个原因呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-6-1 12:04:27 | 显示全部楼层
多谢楼上的这位,百度了一下:有这样一篇文章:
http://blog.csdn.net/yruilin/article/details/5176344。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 16:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表