【发布时间】:2011-08-11 22:52:33
【问题描述】:
我看过一本讲 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 以加快计算速度,这就是为什么使用@987654325 @ 说明符甚至是 32 位的 %ld 也会产生正确的结果。
3.)我的问题是,这种转换是什么时候发生的?是在我们将它作为参数传递给 printf() 函数的时候吗,就像 float 变量在作为参数传递时如何转换为 double 一样表达式或参数,或者在我们使用值 3?? 初始化变量时?
4.)实际上我做了一个小实验,即使用sizeof 运算符和printf() 函数打印出变量num 的大小,它显示了2 bytes。但我仍然不确定何时发生转换。
5.)如果转换发生在我们为short变量赋值的时候,那么创建一个short变量有什么意义??(**如果不是这种情况,这个问题应该忽略 i>)
非常感谢您的帮助
【问题讨论】:
-
"intel based pc" 与 int 大小无关。在旧的 16 位 x86 上,int 为 16 位,而在 x86_64 中,某些编译器实现将 int 为 64 位。 Intel Itanium 也有 64 位 int