Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c语言中的短int变量_C_Unsigned Char - Fatal编程技术网

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);