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

main()
{unsigned a=32768;
printf("a=%d",a);
答案是 -32768 我已经运行过了,麻烦解释下过程~

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);
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-08-20
无符号数存储32768的二进制码为1000000000000000(1和15个0)
转换成有符号数十,由于首位是1,认为这是一个负数,要求其补码,方法是减一取反先变成0111111111111111(0和15个1),取反后变成1000000000000000(1和15个0),值为32768,是负数,前面再加一个符号-32768本回答被提问者采纳
相似回答