整数字面
整数文字是表单的主要表达式
- 十进制字面
它是一个非零的十进制数字(1,2,3,4,5,6,7,8,9),后跟零个或多个十进制数字(0,1,2,3,4,5,6,7,8,9)
int d = 42;
- 八进制字面
它是数字零(0)后跟零个或多个八进制数字(0,1,2,3,4,5,6,7)
int o = 052
- 十六进制字面
它是字符序列 0x 或字符序列 0X 后跟一个或多个十六进制数字(0,1,2,3,4,5,6,7,8,9,a,A,b,B,c,C,d,D,e,E,f,F)
int x = 0x2a;
int X = 0X2A;
- binary-literal(自 C++ 14 起)
它是字符序列 0b 或字符序列 0B 后跟一个或多个二进制数字(0,1)
int b = 0b101010; // C++14
整数后缀(如果提供)可能包含以下一个或两个(如果两者都提供,它们可以按任何顺序出现:
- unsigned-suffix(字符 u 或字符 U)
unsigned int u_1 = 42u;
- long-suffix(字符 l 或字符 L)或 long-long-suffix(字符序列 ll 或字符序列 LL)(自 C++ 11 起)
以下变量也初始化为相同的值:
unsigned long long l1 = 18446744073709550592ull; // C++11
unsigned long long l2 = 18'446'744'073'709'550'592llu; // C++14
unsigned long long l3 = 1844'6744'0737'0955'0592uLL; // C++14
unsigned long long l4 = 184467'440737'0'95505'92LLU; // C++14
笔记
整数文字中的字母不区分大小写:0xDeAdBaBeU 和 0XdeadBABEu 表示相同的数字(一个例外是 long-long-suffix,它是 ll 或 LL,从不 lL 或 Ll)
没有负整数文字。诸如 -1 之类的表达式将一元减号运算符应用于由文字表示的值,这可能涉及隐式类型转换。
在 C99 之前的 C 中(但不是在 C++中),不适合 long int 的未加十进制的十进制值允许使用 unsigned long int 类型。
当在#if 或#elif 的控制表达式中使用时,所有有符号整数常量的行为就像它们具有类型 std::intmax_t 一样,并且所有无符号整数常量的行为就像它们具有类型 std::uintmax_t 一样。