vc++2010下
#include "stdafx.h"
int main()
{
unsigned short us=32768;
printf("%hd\n",us);
printf("%d\n",us);
return 0;
}
打印结果为:-32768和32768.
%hd表示按照有符号short(-32768~+32767)类型输出,有符号的short整数32768是个负数
%d表示按照有符号int(现在的机器和编译器大都把int看成4字节)类型输出,有符号的int整数32768是个正数
你这是十六位机上的情况。在十六位机上unsigned的范围是0~65535,而 printf("a=%d\n", a)中的%d却要求要将a按带符号整型数输出,32768的无符号二进制数是1000 0000 0000 0000,刚好是带符号数-32768的补码,所以答案是A)。现在的int类型已扩展到32位了,出现这种情况要在十进制十位以后……
32768。unsigned int 范围16位的是0-65535
楼上的给的百科自己也仔细看一下嘛,而且都说是unsigned 既然是无符号,怎么可能还带正负号
unsigned int 类型取值范围为-32768~32767