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中的短整型变量的主要内容,如果未能解决你的问题,请参考以下文章