1.0e+1
会返回float
值还是int
值?
当我打印1.0e+1
时,它会10
,但当我sizeof(1.0e+1)
时,它会给我8
。
答案 0 :(得分:6)
答:没有。正如它所写,它表示 a
1.0e+1
会返回float
值还是int
值?
double
。
Nitpick:我们使用术语代表而不是返回
我觉得你很困惑。 IHMO,您需要了解转换说明符的正确用法。
%f
sizeof
输出,您需要使用%zu
也就是说,打印 1.0e+1
表示打印值,而sizeof(1.0e+1)
基本上是sizeof(double)
,因为,浮点文字默认为double
。
相关,来自C11
标准,章节§6.4.4.2
未加浮动的常量类型为
double
。如果以f
或F
为后缀,则其类型为float
。如果以字母“l”或L
为后缀,则其类型为long double
。
答案 1 :(得分:3)
只要您有e
后缀,它就会成为floating point literal。
浮点文字有两种语法。第一部分由以下部分组成:
- 包含小数点字符的非空数字十进制数字序列(定义有效数字)
- (可选) e或E 后跟可选的减号或加号以及非空的十进制数字序列(定义指数)
- (可选)后缀类型说明符为l,f,L或F
另外
后缀类型说明符定义浮点文字的实际类型:
- (无后缀)定义双
- f F定义浮动
- l L定义了long double
在这种情况下,您的两个示例都是double
类型。您需要f
后缀来声明float
文字。
答案 2 :(得分:2)
这是double
,在您的平台和编译器中,sizeof(double) == 8
,而sizeof(float) == 4
,如果您希望它为float 1.0E1f
,则会执行此操作,并且整数将不会' t有小数点分隔符,但仍为sizeof(1E1) == 8
,即它还会生成double
。
换句话说,当您使用指数表示法时,它将始终为double
,除非您使用f
后缀该值,这将生成float
,整数是不可能的用这种表示法,但当然
int x = 1E1;
将x = 10;
,它将是一个整数,因为1E1
将转换为int
。
答案 3 :(得分:1)
当编译器看到1.0时,它会自动成为浮点类型之一。所以1.0e1是10,与10.0相同。但sizeof返回存储值的数据类型的大小。因为它返回8,那么它是一个双倍。标准IEEE 754定义了以下类型:
让编译器设置数据类型通常是错误的编码实践。因此,您需要声明一个变量并将其设置为等于该值。但是,我只能假设您正在做什么,因为您没有发布任何代码。