Lakshmi
Lakshmi

Reputation: 179

Why is initializing an integer in C++ to 010 different from initializing it to 10?

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

Answers (4)

Paul R
Paul R

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

inquam
inquam

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

Cody Gray
Cody Gray

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

Zuljin
Zuljin

Reputation: 2640

Leading 0 in 010 means that this number is in octal form. So 010 means 8 in decimal.

Upvotes: 6

Related Questions