C++数字字面量支持二进制(0b/0B,C++14起)、八进制(0开头)和十六进制(0x/0X),分别用于位操作、传统兼容和硬件交互;支持分隔符('或_)及类型后缀(U/L/LL)以提升可读性与类型安全性。

在C++中,数字字面量支持二进制、八进制和十六进制表示,方便底层编程、位操作和硬件交互。掌握这些写法能提升代码可读性与准确性,避免手动换算出错。
二进制字面量(C++14起支持)
以 0b 或 0B 开头,后跟 0 和 1 的序列。编译器直接识别为整数,类型由值大小和上下文决定(默认 int,超限则为 long 或 long long)。
- 0b1010 等价于十进制 10
- 0b1111'1111(带撇号分隔)等价于 255,提高长二进制的可读性
- 支持负号:-0b101 表示 -5
八进制字面量(传统支持)
以 0 开头(注意:是数字零,不是字母 O),后跟 0–7 的数字。容易误写,需特别留意。
- 012 是八进制,等于十进制 10(不是 12)
- 0 单独出现也表示八进制零,等价于十进制 0
- 含数字 8 或 9 会编译报错:018 非法
十六进制字面量(广泛使用)
以 0x 或 0X 开头,后跟 0–9、a–f(或 A–F)。不区分大小写,常用于内存地址、颜色值、掩码等场景。
立即学习“C++免费学习笔记(深入)”;
- 0xFF = 255,0x1A = 26
- 支持下划线分隔(C++14起):0x1234_5678
- 可加后缀指定类型:0xFFU(unsigned)、0x100000000LL(long long)
类型推导与后缀技巧
字面量默认类型可能引发隐式转换问题,尤其在模板或重载函数中。显式添加后缀更安全:
- 无符号:123U、0xFFU、0b1010U
- 长整型:123L、0xFFFFL
- 长长整型:123LL、0b1111'1111'1111'1111LL
- 浮点字面量不能用进制前缀(如 0xFF.0 不合法),必须用十进制+指数形式











