C语言问题 数据类型转换

#include<stdio.h>main(){inta=-2;printf("%u",a);system("pause");}这个程序教材上写输出65534,可是我自己... #include <stdio.h>
main()
{
int a=-2;
printf("%u",a);
system("pause");

}
这个程序教材上写输出65534,可是我自己用VS2012运行出来是429496796,求大神解释~~~
展开
 我来答
shine1991
科技发烧友

2014-04-15 · 智能家居/数码/手机/智能家电产品都懂点
知道顶级答主
回答量:4.7万
采纳率:82%
帮助的人:2.3亿
展开全部

原因是你的教材估计很老了,对应的编译器将int数据做2字节解释,但是你使用的编译器相对比较新,将int做4字节解释,这个是编译平台的区别导致的问题

这个问题无非是考察有符号数/无符号数存储的问题,你可以把代码做下修改

#include <stdio.h>
main()
{
 int a=-2;
 printf("%hu",(short)a);
 system("pause");

}

 顺便解释下原因:

若int做2字节解释,则-2的二进制补码形式为1111111111111110,翻译成无符号数就是65534

若int做4字节解释,则-2的二进制补码形式为11111111111111111111111111111110,翻译成无符号数就是4294967294

kaixingui2012
2014-04-15 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6449万
展开全部
教材上写的内容是在机器为16位机的时候的事,16位机一个int只占2个字节,故输出的-2按无符号表示就是65534,当时的无符号整数最大值为65535

而现在的机器一般都是32位或64位的机器,一个int占四个字节,无符号整数最大值为2^32-1(4294967295),因此,你机器测试的结果应该是4294967294才是,你写的是错误的吧(429496796) ??
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
叶片舟
2014-04-15 · TA获得超过652个赞
知道小有建树答主
回答量:285
采纳率:100%
帮助的人:318万
展开全部
教材的int类型的大小是2个字节大小

VS2012的int类型是4个字节大小

所以,是429496796

至于为什么是429496796,和是65534的原因一样,有符号数转成无符号数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式