6.4.4.1 Integer constants

Syntax

1

integer-constant:

decimal-constant integer-suffixopt

octal-constant integer-suffixopt

hexadecimal-constant integer-suffixopt

decimal-constant:

nonzero-digit

decimal-constant digit

octal-constant:

0

octal-constant octal-digit

hexadecimal-constant:

hexadecimal-prefix hexadecimal-digit

hexadecimal-constant hexadecimal-digit

hexadecimal-prefix: one of

0x 0X

nonzero-digit: one of

1 2 3 4 5 6 7 8 9

octal-digit: one of

0 1 2 3 4 5 6 7

hexadecimal-digit: one of

0 1 2 3 4 5 6 7 8 9

a b c d e f

A B C D E F

integer-suffix:

unsigned-suffix long-suffixopt

unsigned-suffix long-long-suffix

long-suffix unsigned-suffixopt

long-long-suffix unsigned-suffixopt

unsigned-suffix: one of

u U

long-suffix: one of

l L

long-long-suffix: one of

ll LL

Description

2

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.

3

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.

Semantics

4

The value of a decimal constant is computed base 10; that of an octal constant, base 8; that of a hexadecimal constant, base 16. The lexically first digit is the most significant.

5

The type of an integer constant is the first of the corresponding list in which its value can be represented.

Suffix

Decimal Constant

Octal or Hexadecimal Constant

none

int
long int
long long int
int
unsigned int
long int
unsigned long int
long long int
unsigned long long int

u

 or 

U

unsigned int
unsigned long int
unsigned long long int
unsigned int
unsigned long int
unsigned long long int

l

 or 

L

long int
unsigned long long int
long int
unsigned long int
long long int
unsigned long long int

Both 

u

 or 

U

 and 

l

 or 

L

unsigned long int
unsigned long long int
unsigned long int
unsigned long long int

ll

 or 

LL

long long int
long long int
unsigned long long int

Both 

u

 or 

U

 and 

ll

 or 

LL

unsigned long long int
unsigned long long int

6

If an integer constant cannot be represented by any type in its list, it may have an extended integer type, if the extended integer type can represent its value. If all of the types in the list for the constant are signed, the extended integer type shall be signed. If all of the types in the list for the constant are unsigned, the extended integer type shall be unsigned. If the list contains both signed and unsigned types, the extended integer type may be signed or unsigned. If an integer constant cannot be represented by any type in its list and has no extended integer type, then the integer constant has no type.