
c语言中unsigned int 和 int之间怎么进行转化???麻烦详细解释下面的题目!谢谢~
main(){unsigneda=32768;printf("a=%d",a);答案是-32768我已经运行过了,麻烦解释下过程~...
main()
{unsigned a=32768;
printf("a=%d",a);
答案是 -32768 我已经运行过了,麻烦解释下过程~ 展开
{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);
当把一个unsigned int(无符号整数)赋值为32768时,其内存的二进制形式为
1000000000000000,这个二进制编码也是int(有符号整数)型整数-32768的二进制补码形式,当你按“%d”(十进制有符号数格式)输出时,当然显示为-32768了,你应该用“%u”(无符号数格式)输出。
正确的用法是:
main()
{unsigned a=32768;
printf("a=%u",a);
展开全部
无符号数存储32768的二进制码为1000000000000000(1和15个0)
转换成有符号数十,由于首位是1,认为这是一个负数,要求其补码,方法是减一取反先变成0111111111111111(0和15个1),取反后变成1000000000000000(1和15个0),值为32768,是负数,前面再加一个符号-32768
转换成有符号数十,由于首位是1,认为这是一个负数,要求其补码,方法是减一取反先变成0111111111111111(0和15个1),取反后变成1000000000000000(1和15个0),值为32768,是负数,前面再加一个符号-32768
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
printf ();这是一个函数。
在使用 printf 函数进行输出的时候,不论你给它提供的数据是什么类型,这个函数都会自动转换成 int 型,再输出显示。
虽然,你定义的变量是无符号数(unsigned a)、你存入的数据是:32768。
但是,当你使用 printf 函数时,它就变成了有符号数(int 型)! 你原来存入的 32768,就成了:-32768。
因为,这两个数字,在计算机内存中的二进制数,是相同的,都是:8000H。
为什么它们的二进制数是相同的? 你去好好学学补码,就会明白了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询