代码如下:
#include <stdio.h>
int main(){
unsigned int x = 0xdeadbeef;
unsigned short y = 0xffff;
signed int z = -1;
printf("0x%x\n", y);
printf("0x%x\n", (signed short)y);
return 0;
}
运行结果如下:
为什么转换为signed short就会变成32bits? 求指教
------解决方案--------------------
printf 把输入的参数中小域32bit的参数提升为 int进行处理, 无符号的0xffff执行0扩展即提升为 0x0000ffff , 而有符号的0xffff执行符号位扩展则会提升为 0xffffffff