why sizeof(13.33) is 8 bytes?
When I give sizeof(a)
, where a=13.33
, a float variable, the size is 4 bytes.
But开发者_如何学C if i give sizeof(13.33)
directly, the size is 8 bytes.
I do not understand what is happening. Can someone help?
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.
The literal 13.33 is treated as a double precision floating point value, 8 bytes wide.
The 13.33 literal is being treated as 'double', not 'float'.
Try 13.33f instead.
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!
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
).
精彩评论