c语言中unsigned int 和 int之间怎么进行转化???麻烦详细解释下面的题目!谢谢~

main(){unsigneda=32768;printf("a=%d",a);答案是-32768我已经运行过了,麻烦解释下过程~... main()
{unsigned a=32768;
printf("a=%d",a);
答案是 -32768 我已经运行过了,麻烦解释下过程~
展开
 我来答
chenhaohbu
2010-08-20 · TA获得超过601个赞
知道小有建树答主
回答量:95
采纳率:0%
帮助的人:66.7万
展开全部
TC中整型变量int占2个字节,可表示-32768到+32767这个闭区间范围的整数,unsigned int也占2个字节,可表示0到+65535这个闭区间范围的整数,
当把一个unsigned int(无符号整数)赋值为32768时,其内存的二进制形式为
1000000000000000,这个二进制编码也是int(有符号整数)型整数-32768的二进制补码形式,当你按“%d”(十进制有符号数格式)输出时,当然显示为-32768了,你应该用“%u”(无符号数格式)输出。
正确的用法是:
main()
{unsigned a=32768;
printf("a=%u",a);
bnujwch
2010-08-20 · TA获得超过1432个赞
知道小有建树答主
回答量:697
采纳率:100%
帮助的人:647万
展开全部
无符号数存储32768的二进制码为1000000000000000(1和15个0)
转换成有符号数十,由于首位是1,认为这是一个负数,要求其补码,方法是减一取反先变成0111111111111111(0和15个1),取反后变成1000000000000000(1和15个0),值为32768,是负数,前面再加一个符号-32768
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2025-04-07 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3.2万
采纳率:86%
帮助的人:8797万
展开全部

printf ();这是一个函数。

在使用 printf 函数进行输出的时候,不论你给它提供的数据是什么类型,这个函数都会自动转换成 int 型,再输出显示。

虽然,你定义的变量是无符号数(unsigned a)、你存入的数据是:32768。

但是,当你使用 printf 函数时,它就变成了有符号数(int 型)! 你原来存入的 32768,就成了:-32768。

因为,这两个数字,在计算机内存中的二进制数,是相同的,都是:8000H。

为什么它们的二进制数是相同的? 你去好好学学补码,就会明白了。

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

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式