c语言中的短int变量
以下程序c语言中的短int变量,c,unsigned-char,C,Unsigned Char,以下程序 short b =-10; printf("%x %d",b,sizeof(b)); 产出(与2008年相比) 为什么不呢 FFF6 2 有符号字符也是如此。,因为它被提升为int数据类型。表达式sizeof(type)*CHAR\u BIT计算得出的位数足以包含所需的范围 还请注意,short可能更窄,但也可能与int的宽度相同。始终保证int等于或大于short int CPU short int 8 bit 16
short b =-10;
printf("%x %d",b,sizeof(b));
产出(与2008年相比)
为什么不呢
FFF6 2
有符号字符也是如此。,因为它被提升为int数据类型。表达式
sizeof(type)*CHAR\u 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(此处为32位),因此在本例中,这些是符号扩展提升 因此,printf()将打印出完整32位int的十六进制数字 当短值为负时,符号扩展将用1填充前16位,因此得到FFFFF6而不是fff6
格式字符串中的占位符%x将相应参数解释为无符号int 要将参数打印为短,请在占位符中添加长度修饰符h:
printf("%hx", hex);
这里h表示转换将是dioux或n中的一个
下一个指针是指向短整型或无符号短整型的指针
(而不是int)
代码板链接:
请参见:,因为小于
int
类型的所有整数值都将提升为int
值。符号扩展。这个问题肯定有重复的地方。此外,sizeof
操作符返回类型为size\u t
的值,这通常是一个无符号长的
,这意味着您的格式代码是错误的(应该是%ld”
)。@JoachimPileborg实际上,对于size\u t
,您应该使用格式%zu
当谈到int
的大小时,如果我没有弄错的话,int
不能大于long
(同样,它不能小于short
)。而char
可以是任意大小,但是sizeof(char)
无论实际大小都将始终返回1
。@JoachimPileborg:-是的,这是您添加的一个有效点,但是我认为OP询问的是int和short,所以我在回答中只添加了这两个,还是我遗漏了什么,您没有遗漏任何内容,我只是想添加这些内容以确保完整性。:)@约阿希姆皮勒堡:-好的,太好了。谢谢你。(虽然我不知道为什么我收到了否决票)我正要否决票,因为你没有提到整数促销——就好像你读懂了我的心思@Mr.格式字符串中的占位符%x将相应参数解释为无符号整数。无符号短b=-10;printf(“%x%d”,b,sizeof(b));输出FFF6 2为什么未将无符号短整型提升为无符号整型
printf("%hx", hex);