gpt4 book ai didi

c - C 中数字的隐式类型

转载 作者:太空宇宙 更新时间:2023-11-04 07:34:31 25 4
gpt4 key购买 nike

C 中数字的隐式类型是什么?例如,如果我在计算中有一个小数,小数是否总是被视为 double ?如果我有一个非十进制数,它是否总是被视为一个整数?如果我的非十进制数大于 int 值怎么办?

我很好奇,因为这会影响类型转换和提升。例如,如果我有以下计算:

float a = 1.0 / 25;

1.0 是否被视为 double 而 25 是否被视为 int? 25 然后提升为 double ,以 double 执行计算,然后将结果转换为 float ?

关于:

double b = 1 + 2147483649;   // note that the number is larger than an int value

最佳答案

如果数字既没有小数点也没有指数,它是某种整数;默认情况下,int

如果数字有小数点或指数,则它是某种 float ;默认情况下,double

就是这样。您可以将后缀附加到数字(例如 ULL 用于 unsigned long long)以更精确地指定类型。否则(稍微简化一下),整数是最小的 int 类型(int 类型或更长的类型),它将保存值。

在您的示例中,代码是:

float a = 1.0 / 25;
double b = 1 + 2147483649;

a 的值是通过注意 1.0 是一个 double 和 25 是一个整数来计算的。处理除法时,将 int 转换为 double,执行计算(生成 double),然后将结果强制转换进入一个 float 以分配给 a。所有这些都可以由编译器完成,因此结果将被预先计算。

同样,在32位的int系统上,214783649的值太大,不是int,所以会是被视为大于 int 的有符号类型(longlong long);添加 1(产生相同的类型),然后将该值转换为 double。同样,这一切都在编译时完成。

这些计算与 C 中的其他计算遵循相同的规则。


整数常量的类型规则详见 ISO/IEC 9899:1999 的§6.4.4.1 整数常量。有一张表根据后缀(如果有)和常量类型(十进制与八进制或十六进制)详细说明了类型。对于十进制常量,该值始终是有符号整数;对于八进制或十六进制常量,类型可以根据需要有符号或无符号,只要值适合。感谢Daniel Fischer指出我的错误。

关于c - C 中数字的隐式类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10198671/

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