gpt4 book ai didi

C 数据类型 : Between Short and Int

转载 作者:行者123 更新时间:2023-12-04 10:29:26 27 4
gpt4 key购买 nike

我看了一本讲 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 以加快计算速度,这就是为什么使用 %d 说明符甚至 32 位的 %ld 也会产生正确的结果。

3.)我的问题是,这个转换是什么时候发生的?是在我们将它作为参数传递给 printf() 函数的时候吗,就像 float 变量作为表达式传递时如何转换为 double 或一个参数,或者当我们用值 3 初始化变量时??

4.)实际上我做了一个小实验,即使用 sizeof 运算符和 printf() 函数打印出变量 num 的大小,它显示 2 bytes。但我仍然不确定转换何时发生.

5.)如果转换发生在我们将值赋给 short 变量时,创建一个 short 变量有什么意义??(**如果不是这种情况,则应忽略此问题 )

非常感谢您的帮助

最佳答案

  1. 是的,%d%hd 在这种情况下是等效的。 printf() 是一个可变参数函数,因此规则规定“整数提升”应用于参数。 printf() 根本看不到 short 值,它只看到 int
  2. %ld 用于long int。这可能比普通的 int 更大,所以这本书是错误的。
  3. 转换发生在对 printf() 的调用中。任何传递给 printf()short int 都会被编译器转换为 intshort int 当然没有改变(不知道那是什么意思!)
  4. 当您使用 sizeof 打印大小时,您打印的数字是 short int 的大小(并且该数字的类型为 size_t)。 printf() 甚至没有看到 short intsizeof 运算符看到了,并报告了正确的大小。
  5. 创建short 变量的要点是,如果您想要一个short 变量,您就创建一个。当然,对于大多数变量来说都是如此 :-)。但是,如果您不认为自己特别需要 short int,则可以只使用 int

关于C 数据类型 : Between Short and Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5772303/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com