C语言相关题目

来源:百度知道 编辑:UC知道 时间:2024/07/07 20:15:50
main()
{
unsigned a=32768;
printf("a=%d",a);
}
输出结果是a=-32767
哪位牛B人士可以帮我做个详细的分析哈!
但是答案为什么是-32676?是不是跟那个数据类型的取植范围有关?

a声明的是无符号整数,赋了32768后,值应该是10000000 00000000.
但%d是把参数当成有符号整数来输出.所以把10000000 00000000看成是负数补码的话,就对应负数-32768

无符号整型的输出格式应该是"%u",而不是"%d",如果写成"%d"输出的话,就默认是有符号的整型输出,两个字节的有符号整型数据的最大值是32767,所以a=32768打印出来的效果就是-32768了……