C数据类型:在Short和Int之间
|
我读了一本关于C的书,对我来说,最好先展示代码,然后再问代码。
第一码
#include <stdio.h>
int main(void)
{
short num = 3;
printf(\"%hd\\n\" , num );
return 0;
}
第二码
#include <stdio.h>
int main(void)
{
short num = 3;
printf(\"%d\\n\" , num );
return 0;
}
特别说明:我使用的是基于Intel的PC,因此int大小为32位。
题 :
1.)书中提到这两个代码可以正确运行,尽管其中一个使用%hd
说明符,而另一个使用%d
说明符。
2.)书中的原因是因为C机制会自动将short类型转换为int以便更快地进行计算,这就是为什么使用32位的%d
甚至%ld
也会产生正确的结果的原因。
3.)我的问题是,什么时候发生这种转换?是在我们将其作为参数传递给printf()
函数的时间,就像将float变量作为表达式或参数传递时如何将其转换为double一样,或者在我们将变量初始化为值3
??
4,实际上我已经做了一个小实验,那就是使用sizeof
运算符和printf()
函数打印出变量num的大小,并显示2 bytes
,但是我仍然不确定转换何时发生。
5.)如果转换是在我们将值分配给short变量的时间内发生的,那么创建short变量的意义何在?(**如果不是这种情况,则应忽略此问题)
非常感谢您的帮助
没有找到相关结果
已邀请:
3 个回复
焙恍挝厂熄
到
或
的东西。这往往会协调大多数类型。 这可能是C引入世界的一个有趣功能。实际上,它在某种程度上发生在指令集级别或ABI级别。参数在寄存器中或在堆栈上传递,通常没有人允许未对齐堆栈或在高阶位留下垃圾。 C如此出色地匹配硬件并运行得如此之快的另一个原因。
孝铜差
是可变函数,因此规则说“整数提升”应用于自变量。
根本看不到
的值,而只看到see11ѭ。
代表
。它的大小可能会比普通的ѭ11大,因此这本书是错误的。 转换发生在对
的调用中。传递给
的任何
都会由编译器转换为
。
当然不会改变(不确定那是什么意思!) 当使用ѭ8the打印尺寸时,您正在打印的数字是
的尺寸(且数字为
类型)。
甚至看不到
,
运算符却显示正确的大小。 创建
变量的要点是,如果需要
变量,则可以创建一个。当然,对于大多数变量来说都是这样。但是,如果您认为不需要ѭ24,,也可以只使用
。
澳绍能
的调用中,因为对于可变参数函数,作为
的一部分传入的所有参数都首先扩展为
(如果参数是
,则扩大为
)。