Allows values of integer type to be used in expressions directly.
An integer constant is a nonlvalue expression of the form.
decimalconstant integersuffix(optional)  (1)  
octalconstant integersuffix(optional)  (2)  
hexconstant integersuffix(optional)  (3) 
where.
1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
), followed by zero or more decimal digits (0
, 1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
) 0
) followed by zero or more octal digits (0
, 1
, 2
, 3
, 4
, 5
, 6
, 7
) 0x
or the character sequence 0X
followed by one or more hexadecimal digits (0
, 1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
, a
, A
, b
, B
, c
, C
, d
, D
, e
, E
, f
, F
) u
or the character U
) l
or the character L
) or the longlongsuffix (the character sequence ll
or the character sequence LL
) (since C99) The following variables are initialized to the same value:
int d = 42; int o = 052; int x = 0x2a; int X = 0X2A;
The type of the integer constant is the first type in which the value can fit, from the list of types which depends on which numeric base and which integersuffix was used.
Types allowed for integer constants  

suffix  decimal bases  hexadecimal or octal bases 
no suffix  int
 int

u or U  unsigned int
 unsigned int

l or L  long int
 long int

both l /L and u /U  unsigned long int
 unsigned long int

ll or LL  long long int (since C99)  long long int (since C99)

both ll /LL and u /U  unsigned long long int (since C99)  unsigned long long int (since C99) 
If the value of the integer constant is too big to fit in any of the types allowed by suffix/base combination and the compiler supports extended integer types (such as __int128
), the constant may be given the extended integer type; otherwise, the program is illformed.
Letters in the integer constants are caseinsensitive: 0xDeAdBaBeU
and 0XdeadBABEu
represent the same number (one exception is the longlongsuffix, which is either ll
or LL
, never lL
or Ll
).
There are no negative integer constants. Expressions such as 1
apply the unary minus operator to the value represented by the constant, which may involve implicit type conversions.
When used in a controlling expression of #if or #elif, all signed integer constants act as if they have type intmax_t
and all unsigned integer constants act as if they have type uintmax_t
.
Integer constants may be used in integer constant expressions.
Due to maximal munch, hexadecimal integer constants ending in e
and E
, when followed by the operators +
or 
, must be separated from the operator with whitespace or parentheses in the source:
int x = 0xE+2; // error int y = 0xa+2; // OK int z = 0xE +2; // OK int q = (0xE)+2; // OK
Otherwise, a single invalid preprocessing number token is formed, which causes further analysis to fail.
#include <stdio.h> #include <inttypes.h> int main(void) { printf("123 = %d\n", 123); printf("0123 = %d\n", 0123); printf("0x123 = %d\n", 0x123); printf("12345678901234567890ull = %llu\n", 12345678901234567890ull); // the type is a 64bit type (unsigned long long or possibly unsigned long) // even without a long suffix printf("12345678901234567890u = %"PRIu64"\n", 12345678901234567890u ); // printf("%lld\n", 9223372036854775808); // ERROR // the value 9223372036854775808 cannot fit in signed long long, which is the // biggest type allowed for unsuffixed decimal integer constant printf("%llu\n", 9223372036854775808ull ); // unary minus applied to unsigned value subtracts it from 2^64, // this gives unsigned 9223372036854775808 printf("%lld\n", 9223372036854775807ull  1); // correct way to form signed value 9223372036854775808 }
Output:
123 = 123 0123 = 83 0x123 = 291 12345678901234567890ull = 12345678901234567890 12345678901234567890u = 12345678901234567890 9223372036854775808 9223372036854775808
© cppreference.com
Licensed under the Creative Commons AttributionShareAlike Unported License v3.0.
http://en.cppreference.com/w/c/language/integer_constant