c中的short int变量

时间:2014-08-08 12:57:39

标签: c unsigned-char

以下计划

short b =-10;
printf("%x %d",b,sizeof(b));

输出(vs vs 2008)

 FFFFFFF6 2 

为什么不

 FFF6 2 

与签名字符相同。

2 个答案:

答案 0 :(得分:5)

这是由于整数类型促销。

你的短裤被隐含地提升为int。 (这里是32位)所以这些是签名扩展促销。

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

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


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

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

printf("%hx", hex);
  

这里h表示转换将是d x o u x或n之一   并且下一个指针是指向short int或unsigned short int的指针   (而不是int)。

codepad link:http://codepad.org/aX2MzY0o

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

答案 1 :(得分:0)

因为它被提升为int数据类型。表达式sizeof(type) * CHAR_BIT的计算结果足以包含所需的范围。

另请注意,short可能更窄,但也可能与int相同。始终保证int等于或大于short int。

CPU             short   int
8 bit           16      16
16 bit          16      16
32 bit          16      32
64 bit          16      32