When you prefix a number with 0 in C it assumes that the number you are inputting is no long in decimal (base 10, the one we normally use in the real world) but instead in octal (base 8, it runs 0, 1, ... 7, 10, 11, ... 17, 20, 21, ...)
So this:
int a=16,b=012,c=054;
Creates three variables and assignes values to them:
a 16 deciml, value 16
b 012 octal, value 10 in decimal
c 054 octal, value 44 in decimal
You can also prefix number with "0x" or "0X" to enter hexadecimal (or just "hex") numbers
- which are a lot more common these days than octal.
See here:
Octal - Wikipedia[
^]
And here:
Hexadecimal - Wikipedia[
^]