int main(int argc, char *argv[])
{ short a = 0xffff; printf("a = 0x%x\n", a);if(a == 0xffff)
{
printf("Just Test\n");
}
return 0;
}
最后输出的结果是 a = 0xffffffff
原因如下:
1.%x 表示要输出无符号整数(unsigned int)的十六进制形式
2.当有符号类型向更大长度类型转换时,如果首位为1,则前面全部补全为1,如首位为0,则前面全部补全为0
预期的打印Just Test不会被打出来,因为:
在比较时a被强制转换成unsigned int(即0xffffffff) 与 0x0000ffff比较不相等