INFO: How C Interprets Integer Constants with Leading Zeroes (35037)



The information in this article applies to:

  • Microsoft Visual C++ 1.0
  • Microsoft Visual C++ 1.5
  • Microsoft Visual C++ 1.51
  • Microsoft Visual C++ 1.52
  • Microsoft Visual C++ 2.0
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 4.0
  • Microsoft Visual C++, 32-bit Enterprise Edition 5.0
  • Microsoft Visual C++, 32-bit Enterprise Edition 6.0
  • Microsoft Visual C++, 32-bit Professional Edition 5.0
  • Microsoft Visual C++, 32-bit Professional Edition 6.0
  • Microsoft Visual C++, 32-bit Learning Edition 6.0

This article was previously published under Q35037

SUMMARY

Two similar assignment statements produce very different results when the application prints values assigned. For example:
   a = 20;
   printf("%d", a);   /* this prints "20" */ 
   a = 020;
   printf("%d", a);   /* but this prints "16" */ 
				
Any number with a leading "0" (zero) is interpreted to be an octal number (base 8). Remove the leading zero from the decimal number.

MORE INFORMATION

All character constants of the form "\<o>", "\<o><o>", "\<o><o><o>", (where <o> is a digit) and their string equivalents are specified in octal as well. For example, \33 and \033 each specify the ESC character (decimal 27, hexadecimal 1B). To specify a character constant in hexadecimal, use "\x<h><h>", where <h> is a hexadecimal digit. C does not provide a method to specify a decimal number in a character constant; you can use a decimal integer constant instead (for example, ch = 27).

Modification Type:MajorLast Reviewed:12/11/2003
Keywords:kbinfo kbLangC KB35037