[英]Short int variable in c
以下程序
short b =-10;
printf("%x %d",b,sizeof(b));
产出(vs 2008)
FFFFFFF6 2
为什么不
FFF6 2
带签名的字符也是如此。
这是由于整数类型提升。
您的短裤被隐式提升为int。 (此处为32位)因此在这种情况下,这些是符号扩展促销。
因此,您的printf()打印出完整的32位int的十六进制数字。
当您的short值为负数时,符号扩展将用1填充前16位,因此得到的是fffffff6而不是fff6。
格式字符串中的占位符%x将相应的参数解释为unsigned int。
要将参数打印为短参数,请在占位符上添加一个长度修饰符h:
printf("%hx", hex);
此处h表示转换将是dioux X或n中的一个,下一个指针是一个指向short int或unsigned short int(而不是int)的指针。
键盘链接: http : //codepad.org/aX2MzY0o
看到这个: http : //en.wikipedia.org/wiki/Printf_format_string#Format_placeholders
因为它被提升为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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.