c中的short int变量

Roh*_*ara 2 c unsigned-char

以下程序

short b =-10;
printf("%x %d",b,sizeof(b));
Run Code Online (Sandbox Code Playgroud)

输出(与vs 2008)

 FFFFFFF6 2 
Run Code Online (Sandbox Code Playgroud)

为什么不

 FFF6 2 
Run Code Online (Sandbox Code Playgroud)

签名字符也一样.

Jee*_*tel 5

这是由于整数类型促销.

你的短裤被隐含地提升为int.(这里是32位)所以这些是在这种情况下的符号扩展促销.

因此,printf()打印出完整32位int的十六进制数字.

当您的短值为负时,符号扩展将使用1填充前16位,因此您获得fffffff6而不是fff6.


格式字符串中的占位符%x将相应的参数解释为unsigned int.

要将参数打印为short,请将长度修饰符h添加到占位符:

printf("%hx", hex);
Run Code Online (Sandbox Code Playgroud)

这里h表示转换将是dioux X或n之一,下一个指针是指向short int或unsigned short int(而不是int)的指针.

codepad链接:http://codepad.org/aX2MzY0o

请参阅:http://en.wikipedia.org/wiki/Printf_format_string#Format_placeholders