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
The 13.33 literal is being treated as 'double', not 'float'.
Try 13.33f instead.
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.
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
).
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!