值1.0e + 1的类型是什么

时间:2015-05-15 13:31:51

标签: c floating-point

1.0e+1会返回float值还是int值?

当我打印1.0e+1时,它会10,但当我sizeof(1.0e+1)时,它会给我8

4 个答案:

答案 0 :(得分:6)

  

1.0e+1会返回float值还是int值?

答:没有。正如它所写,它表示 a double

Nitpick:我们使用术语代表而不是返回

我觉得你很困惑。 IHMO,您需要了解转换说明符的正确用法。

  1. 要打印浮动,您需要使用%f
  2. 要打印sizeof输出,您需要使用%zu
  3. 也就是说,打印 1.0e+1表示打印,而sizeof(1.0e+1)基本上是sizeof(double),因为,浮点文字默认为double

    相关,来自C11标准,章节§6.4.4.2

      

    未加浮动的常量类型为double。如果以fF为后缀,则其类型为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定义了以下类型:

  • float:32位或4字节
  • double:64位或8字节
  • long double:80位或10字节

让编译器设置数据类型通常是错误的编码实践。因此,您需要声明一个变量并将其设置为等于该值。但是,我只能假设您正在做什么,因为您没有发布任何代码。