【问题标题】:why sizeof(13.33) is 8 bytes?为什么 sizeof(13.33) 是 8 个字节?
【发布时间】:2011-04-04 10:34:25
【问题描述】:

当我给sizeof(a),其中a=13.33,一个浮点变量时,大小为4字节。 但是如果我直接给sizeof(13.33),大小是8字节。

我不明白发生了什么。有人可以帮忙吗?

【问题讨论】:

标签: c++ c sizeof


【解决方案1】:

这些是语言的规则。

13.33 是一个数字文字。它被视为双倍,因为它是双倍。如果您希望将 13.33 视为浮点文字,则声明 13.33f。

13.33 是一个双重文字。如果 sizeof(float) == 4,sizeof(13.33f) == 4 也应该成立,因为 13.33f 是一个浮点字面量。

【讨论】:

    【解决方案2】:

    文字 13.33 被视为双精度浮点值,8 字节宽。

    【讨论】:

    • 要将数字文字显式标记为单精度浮点数,请尝试13.33f。 sizeof(13.33f) 返回预期的 4。
    【解决方案3】:

    13.33 字面量被视为“double”,而不是“float”。

    改用 13.33f。

    【讨论】:

      【解决方案4】:

      变量的类型和大小都可以。 只是编译器有一些默认的文字类型,那些常量值硬编码在你的程序中。

      如果您请求sizeof(1),您将获得sizeof(int)。如果您请求sizeof(2.5),您将获得sizeof(double)。这些显然分别适合 char 和 float ,但编译器具有您的文字的默认类型,并将在分配之前将它们视为默认类型。

      不过,您可以覆盖此默认行为。例如:

      2.5 // as you didn't specify anything, the compiler will take it for a double.
      2.5f // ah ha! you're specifying this literal to be float
      

      干杯!

      【讨论】:

        【解决方案5】:

        因为13.33 是double,如果您分配它,它会被截断为float。 double 是 8 个字节。要创建真正的浮点数,请使用13.33f(注意f)。

        【讨论】:

          猜你喜欢
          • 2013-12-08
          • 1970-01-01
          • 2021-12-28
          • 2021-09-26
          • 1970-01-01
          • 2021-07-02
          • 1970-01-01
          • 2017-01-03
          • 2010-10-17
          相关资源
          最近更新 更多