整数字面

整数文字是表单的主要表达式

  • 十进制字面

它是一个非零的十进制数字(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 一样。