c中的短整型变量

Posted

技术标签:

【中文标题】c中的短整型变量【英文标题】:Short int variable in c 【发布时间】:2014-08-08 12:57:38 【问题描述】:

下面的程序

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

产出(与 2008 年相比)

 FFFFFFF6 2 

为什么不

 FFF6 2 

签名字符也是如此。

【问题讨论】:

因为所有小于int 类型的整数值都被提升为int 值。 签名扩展。这个问题肯定有重复。 另外,sizeof 运算符返回一个size_t 类型的值,通常是unsigned long,这意味着您的格式代码错误(应该是"%ld")。 @JoachimPileborg 实际上,对于size_t,您应该使用格式"%zu" 【参考方案1】:

这是由于整数类型提升。

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

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

当你的 short 值为负时,符号扩展将用 1 填充前 16 位,因此你得到 fffffff6 而不是 fff6。


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

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

printf("%hx", hex);

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

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

看到这个:http://en.wikipedia.org/wiki/Printf_format_string#Format_placeholders

【讨论】:

刚刚要投反对票,因为你没有提到整数提升 - 就好像你读懂了我的想法! @Mr.格式字符串中的占位符 %x 将相应的参数解释为 unsigned int。无符号短 b=-10; printf("%x %d",b ,sizeof(b));输出 FFF6 2 为什么 unsigned short int 没有被提升为 unsigned int【参考方案2】:

因为它被提升为 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

【讨论】:

说到int的大小,如果我没记错的话int不能大于long(同样不能小于short) . char 可以是任意大小,但无论实际大小如何,sizeof(char) 都会始终返回 1 @JoachimPileborg:- 是的,这是你添加的一个有效点,但是我认为 OP 是在询问 int 和 short 所以我在我的答案中只添加了这两个,还是我遗漏了什么?跨度> 不不,你没有遗漏任何东西,我只是想添加这些以保持完整性。 :) @JoachimPileborg:- 好的。感谢那。 (虽然我不知道为什么我收到了反对票)

以上是关于c中的短整型变量的主要内容,如果未能解决你的问题,请参考以下文章

工业物联网网关变量的数据类型

大于 32767 的短整型值

C语言中的32个关键字

C语言中的32个关键字

C语言中的整型提升

C语言中的整型提升