c++二进制、八进制、十六进制表示法 c++数字字面量【技巧】

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

在C++中,数字字面量支持二进制、八进制和十六进制表示,方便底层编程、位操作和硬件交互。掌握这些写法能提升代码可读性与准确性,避免手动换算出错。

二进制字面量(C++14起支持)

0b0B 开头,后跟 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 非法

十六进制字面量(广泛使用)

0x0X 开头,后跟 0–9、a–f(或 A–F)。不区分大小写,常用于内存地址、颜色值、掩码等场景。

  • 0xFF = 255,0x1A = 26
  • 支持下划线分隔(C++14起):0x1234_5678
  • 可加后缀指定类型:0xFFU(unsigned)、0x100000000LL(long long)

类型推导与后缀技巧

字面量默认类型可能引发隐式转换问题,尤其在模板或重载函数中。显式添加后缀更安全:

  • 无符号:123U0xFFU0b1010U
  • 长整型:123L0xFFFFL
  • 长长整型:123LL0b1111'1111'1111'1111LL
  • 浮点字面量不能用进制前缀(如 0xFF.0 不合法),必须用十进制+指数形式