整型字面量
#纯右值
直接写在代码中的整数常量,在编译期确定类型和值。
语法形式
cpp
整数基数字面量 + [可选整型后缀]基数形式
| 进制 | 写法 | 示例 |
|---|---|---|
| 十进制 | 无前缀 | 42 |
| 八进制 | 0 开头 | 052 |
| 十六进制 | 0x / 0X 开头 | 0x2A |
| 二进制 #cpp14 | 0b / 0B 开头 | 0b101010 |
TIP
#cpp14 数字中间可以插入单引号 ' 作为分隔符(编译器会忽略,仅用于提高可读性)。
整型后缀
整型字面量可以添加后缀,用于指示期望的类型:
| 后缀 | 含义 |
|---|---|
| 无 | 默认根据范围从 int → long → long long 推断 |
u / U | 无符号 |
l / L | long 长整型后缀 |
ll / LL #cpp11 | long long 长长整型后缀 |
z / Z #cpp23 | size_t 的最小匹配类型 |
后缀可以组合出现,如 ul、llu、zu,顺序不影响意思。
字面量的类型推导规则
字面量的真实类型由 值范围 + 后缀组合 决定:
没有后缀时:
- 十进制基数:尝试匹配
int→long→long long - 二/八/十六进制:尝试匹配
int→unsigned int→long→unsigned long→long long→unsigned long long
加 u / U 后缀:尝试匹配 unsigned int → unsigned long → unsigned long long
加 l / L 后缀:尝试匹配 long → unsigned long → long long → unsigned long long
加 ul / UL 后缀:尝试匹配 unsigned long → unsigned long long
加 ll / LL 后缀:尝试匹配 long long → unsigned long long
加 ull / ULL 后缀:尝试匹配 unsigned long long
加 z / Z 后缀:尝试匹配 std::size_t
其它重要规则
- 大小写不敏感:
- 十六进制数字(
a-f)大小写无差异 - 后缀字符大小写无差异
- 十六进制数字(
- 没有负数字面量:
-1不是一个负数字面量,而是对1应用一元-运算符。