简单c程序设计

#include<stdio.h>main(){inta=-1,b,c;b=(unsignedint)a;c=(longint)a;printf("%d\n%ld",b,... #include<stdio.h>
main()
{
int a=-1,b,c;
b=(unsigned int)a;
c=(long int)a;
printf("%d\n%ld",b,c);
}

两者为什么有不同?
是不一样的
展开
 我来答
RRFantasy
2010-10-28 · TA获得超过522个赞
知道小有建树答主
回答量:364
采纳率:0%
帮助的人:327万
展开全部
从根本上来说,a,b,c在内存中的有效数据是一样的,用二进制来表示就是
(int型占4个字节)。
a是int型,而且还是负数,在内存中用反码表示是32个1,即(11111111...)
b是unsigned int型,内存中是16个1(b取的是a的后半段,此时a的前半段仍然在内存中),但是编译器表示b是uint型的,所以当b作为uint型输出时,是一个最大的整数,即2^16 - 1。
c语言的long int和int在使用时我没发现他们的区别,不论从字节长度还是其他不同之处都没发现,暂且可以认为是一样的。

那么为什么结果都是-1呢?
问题就出在printf("%d\n%ld",b,c)上。代码中不难看出,编译器会把b当做int型的数输出,因为标注的是%d(%d表示int型),假设你把这句代码改为printf("%ud\n%ld",b,c),(%ud表示uint型),那么你就知道了。
#include<stdio.h>
main()
{
int a=-1,b,c;
b=(unsigned int)a;
c=(long int)a;
printf("%ud\n%ld\n",b,c);
b>>16;//位操作,表示二进制的b循环右移16位,即把b的高2个字节移下来显示。
printf("%ud\n%ld\n",b,c);
}
617565531
2010-10-28 · 超过13用户采纳过TA的回答
知道答主
回答量:66
采纳率:0%
帮助的人:41.5万
展开全部
在Turbo C环境下
long int长整型占32位
unsigned int无符号整型占16位
C程序中首先printf("%d\n%ld",b,c);改为printf("%u\n%ld",b,c);
-1在计算机中存储为16个1,a值强制转换为无符号型,直接将16个1赋值给b,则b=65535 c=-1
在VC环境下
unsigned int无符号整型占32位
b=4294967295 c=-1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
CT知道
2010-10-28 · TA获得超过1502个赞
知道大有可为答主
回答量:400
采纳率:0%
帮助的人:329万
展开全部
两者最后输出的结果都是一样的,都是-1
运行结果确实都是-1,没错啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
z84727266
2010-10-26 · 超过16用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:32.1万
展开全部
unsigned int:无符号形

long int:长整形
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式