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%
帮助的人:57.5万
展开全部
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获得超过1431个赞
知道小有建树答主
回答量:697
采纳率:100%
帮助的人:601万
展开全部
无符号数存储32768的二进制码为1000000000000000(1和15个0)
转换成有符号数十,由于首位是1,认为这是一个负数,要求其补码,方法是减一取反先变成0111111111111111(0和15个1),取反后变成1000000000000000(1和15个0),值为32768,是负数,前面再加一个符号-32768
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式