【问题标题】:What is the type of the value 1.0e+1值 1.0e+1 的类型是什么
【发布时间】:2015-05-15 13:31:51
【问题描述】:

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

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

【问题讨论】:

  • 如果你想了解 C,为什么要标记为 C++?
  • 如果您将printf%s(或其他一些无意义的格式说明符)一起使用,警告:格式指定类型'char *',但参数的类型为''
  • 所有浮点值默认为double,除非后缀为 e.g. f.
  • @NathanOliver 这适用于两种语言,这是我认为同时拥有两个标签实际上可以的一种情况。
  • 因为打印1.0e+1sizeof(1.0e+1)不一样。仅仅因为1.0e+1 不是 sizeof(1.0e+1)

标签: c floating-point


【解决方案1】:

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

回答:没有。正如它所写的那样,它代表一个double

吹毛求疵:让我们用represent这个词代替return

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

  1. 要打印浮点数,需要使用%f
  2. 要打印sizeof 输出,您需要使用%zu

也就是说,printing 1.0e+1 表示打印 ,而 sizeof(1.0e+1) 本质上是 sizeof(double),因为,浮点字面量 默认为double

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

无后缀的浮动常量的类型为double。如果以字母fF 为后缀,则其类型为float。如果以字母 ``l 或 L 为后缀,则其类型为 long double

【讨论】:

    【解决方案2】:

    只要你有一个e 后缀,它就会变成一个floating point literal

    浮点字面量有两种语法。第一个由以下部分组成:
    - 包含小数点字符的非空十进制数字序列(定义有效数字)
    - (可选)e 或 E 后跟可选的减号或加号以及十进制数字的非空序列(定义指数)
    - (可选)作为 l、f、L 或 F 的后缀类型说明符

    还有

    后缀类型说明符定义了浮点字面量的实际类型:
    - (无后缀)定义双精度
    - f F 定义浮点数
    -l L 定义long double

    在这种情况下,您的两个示例都是double 类型。您需要一个 f 后缀来声明 float 文字。

    【讨论】:

      【解决方案3】:

      这是一个double,在你的平台和编译器中,sizeof(double) == 8,而sizeof(float) == 4,如果你希望它是浮点数,1.0E1f 会这样做,整数不会有小数点分隔符,但仍然sizeof(1E1) == 8 即它也会生成一个double

      换句话说,当您使用指数表示法时,它将始终是double,除非您使用f 为该值添加后缀,这将生成float,这种表示法不能使用整数,但是课程

      int x = 1E1;
      

      将使x = 10; 成为一个整数,因为1E1 将被转换为int

      【讨论】:

      • sizeof(double)sizeof(float) 是实现定义的值。常见的实现选择是84,但也有不同大小的实际编译器。真实的是sizeof(1E1) == sizeof(double)
      【解决方案4】:

      当编译器看到 1.0 时,它自动成为浮点类型之一。所以 1.0e1 是 10,与 10.0 相同。但是 sizeof 返回存储值的数据类型的大小。因为它返回 8,所以它是双倍的。标准IEEE 754 定义了以下类型:

      • 浮点数:32 位或 4 字节
      • 双精度:64 位或 8 字节
      • long double:80 位或 10 个字节

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-28
        • 2022-07-07
        • 1970-01-01
        • 1970-01-01
        • 2010-10-24
        • 2014-10-17
        • 2022-01-25
        相关资源
        最近更新 更多