I used below code in my printf statement.
void main()
{
int n=0102;
printf(\"%d\", n);
}
This prints 66 as the answer. I also chang
You tell printf to print the value in decimal (%d). Use %o to print it in octal.
This is because when the first digit of a number (integer constant) is 0
(and second must not be x
or X
), the compiler interprets it as an octal number. Printing it with %d
will give you a decimal value.
To print octal value you should use %o
specifier
printf("%o", n);
An integer constant begins with a digit, but has no period or exponent part. It may have a prefix that specifies its base and a suffix that specifies its type.
A decimal constant begins with a nonzero digit and consists of a sequence of decimal digits. An octal constant consists of the prefix 0 optionally followed by a sequence of the digits 0 through 7 only. A hexadecimal constant consists of the prefix 0x or 0X followed by a sequence of the decimal digits and the letters a (or A) through f (or F) with values 10 through 15 respectively.
1.Decimal constants: Must not begins with 0
.
12 125 3546
2.Octal Constants: Must begins with a 0
.
012 0125 03546
3.Hexadecimal Constants: always begins with 0x
or 0X
.
0xf 0xff 0X5fff
any numeric literal starting with 0
followed only by numbers is taken as an octal number.
Hence
0102 = (1 * 8^2) + (0 * 8^1) + (2 * 8^0) = 64 + 0 + 2 = 66
012 = (1 * 8^1) + (2 * 8^0) = 8 + 2 = 10