why sizeof(13.33) is 8 bytes?

后端 未结 5 650
醉酒成梦
醉酒成梦 2020-12-06 18:38

When I give sizeof(a), where a=13.33, a float variable, the size is 4 bytes. But if i give sizeof(13.33) directly, the size is 8 bytes

相关标签:
5条回答
  • 2020-12-06 18:59

    The 13.33 literal is being treated as 'double', not 'float'.

    Try 13.33f instead.

    0 讨论(0)
  • 2020-12-06 19:07

    Those are the rules of the language.

    13.33 is a numeric literal. It is treated as a double because it is a double. If you want 13.33 to be treated as a float literal, then you state 13.33f.

    13.33 is a double literal. If sizeof(float) == 4, sizeof(13.33f) == 4 should also hold because 13.33f is a float literal.

    0 讨论(0)
  • 2020-12-06 19:08

    The literal 13.33 is treated as a double precision floating point value, 8 bytes wide.

    0 讨论(0)
  • 2020-12-06 19:09

    Because 13.33 is a double, which gets truncated to a float if you assign it. And a double is 8bytes. To create a real float, use 13.33f (note the f).

    0 讨论(0)
  • 2020-12-06 19:17

    The type and size of your variable are fine. It's just that the compiler has some default types for literals, those constant values hard-coded in your program.

    If you request sizeof(1), you'll get sizeof(int). If you request sizeof(2.5), you'll get sizeof(double). Those would clearly fit into a char and a float respectively, but the compiler has default types for your literals and will treat them as such until assignment.

    You can override this default behaviour, though. For example:

    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
    

    Cheers!

    0 讨论(0)
提交回复
热议问题