高手请进~c语言不同类型之间的赋值

#include<stdio.h>voidmain(){unsignedinta;longintb;a=-1;b=a;printf("%x,%d,%o\n",a,a,a)... #include<stdio.h>
void main()
{
unsigned int a;
long int b;
a=-1;
b=a;
printf("%x,%d,%o\n",a,a,a);
printf("%x,%d,%o\n",b,b,b) ;
}

输出%d的b的值为0为什么?
有高手可以总结下c语言不同类型之间的赋值规律吗
展开
 我来答
百度网友9cde087
2008-10-25 · TA获得超过392个赞
知道小有建树答主
回答量:273
采纳率:0%
帮助的人:312万
展开全部
我在VC++6.0上执行程序的结果也是-1而不是0 。
你是用的什么运行的?
这个与数据在计算机中的存放方式有关,所有数据在计算机中都是以二进制补码的形式存放的。我们先来看看在TC2.0环境下的情况。在TC中int 型为两个字节,而long int型为四个字节,也就是
int的长度为
--------
--------
long int型的长度为
--------
--------
--------
--------
无符号数的长度也是一样的,当楼主把-1赋给无符号的整型a时,a中的二进制情况为
10000000
00000001
而楼主把a又赋给long int型的b时,b中的二进制存放情况为
10000000
00000001
00000000
00000000
这时楼主又按"%d"的格式输出b,"%d"在TC2.0中只输出了两个字节,所以就只输出了
00000000
00000000
其结果就为“0”
如果楼主按“%ld"的格式输出,这时输出的就是四个字节,即
10000000
00000001
00000000
00000000
这个二进制数所对应的十进制数为-65536所以结果就会输出“-65536”
若是在VC++6.0中结果就不一样了,因为在VC++中int型与long int型的长度都是四个字节所以它们之间相互赋值不会有什么影响,结果仍为“-1”.如果学过汇编语言对这些就应该比较清楚。
baiguanghuibgh
2008-10-24
知道答主
回答量:2
采纳率:0%
帮助的人:0
展开全部
我在VC++6.0上执行程序的结果是-1而不是0 你再试一下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hwVanessa
2008-10-24 · TA获得超过173个赞
知道答主
回答量:285
采纳率:0%
帮助的人:85.9万
展开全部
%d整型、%ld长整型、%c字符、%s字符串、%f浮点型
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友09d7a6845
2008-10-25 · 超过21用户采纳过TA的回答
知道答主
回答量:67
采纳率:0%
帮助的人:56.7万
展开全部
paulclover - 初入江湖 二级
正确!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0814d0a
2008-10-24 · TA获得超过1085个赞
知道小有建树答主
回答量:1254
采纳率:0%
帮助的人:988万
展开全部
-1负数
unsigned 无符号
出错了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式