Reputation: 179
When an integer is initialized as int a = 010
, a
is actually set to 8, but for int a = 10
, a
is set to 10.
Can anyone tell me why a
is not set to 10 for int a = 010
?
Upvotes: 6
Views: 3264
Reputation: 213059
In C
, C++
, Objective C
and related languages a 0
prefix signifies an octal literal constant, so 010
= 8
in decimal.
Upvotes: 8
Reputation: 12942
0 before the number means it's in octal notation. So since octal uses a base of 8, 010 would equal 8.
In the same way 0x is used for hexadecimal notation which uses the base of 16. So 0x10 would equal 16 in decimal.
Upvotes: 9
Reputation: 244843
Because it's interpreting 010
as a number in octal format. And in a base-8 system, the number 10
is equal to the number 8
in base-10 (our standard counting system).
More generally, in the world of C++, prefixing an integer literal with 0
specifies an octal literal, so the compiler is behaving exactly as expected.
Upvotes: 13
Reputation: 2640
Leading 0 in 010 means that this number is in octal form. So 010 means 8 in decimal.
Upvotes: 6