讲师中心 微信公众号
AI工具推荐 视频效率加速

C++中的二进制字面量与数字分隔符是什么?(如何提高代码可读性)

云强君_1853

云强君_1853

发布时间:2026-02-25 14:42:11

|

728人浏览过

|

来源于php中文网

原创

二进制字面量以0b或0B开头,后接0和1;C++14起支持数字分隔符',仅限字面量内部两数字间;空格非法,大小写不敏感但建议统一小写b;需注意跨平台编译器版本兼容性。

c++中的二进制字面量与数字分隔符是什么?(如何提高代码可读性)

二进制字面量怎么写?0b开头但别漏掉小写 b

从 C++14 开始支持二进制字面量,语法是 0b 或 0B 开头,后面跟 0 和 1。大小写敏感——0B1010 合法,0b1010 也合法,但 0B1010 和 0b1010 是等价的;而 0B 写成 0B 就不行,必须是连续两个字符。

常见错误是误写成 0x 风格(比如 0b10101010 写成 0b1010 1010 中间加空格)——这会直接编译失败,空格不被允许。

  • int x = 0b1100'0011; ✅(带分隔符,C++14 起支持)
  • int y = 0b1100 0011; ❌(空格非法,报错:error: invalid digit ' ' in binary constant)
  • int z = 0B1100'0011; ✅(B 大写也行,但风格建议统一用小写 b)

数字分隔符 ' 能用在哪些地方?只限字面量内部

' 是 C++14 引入的“数字分隔符”,作用纯属提升可读性,编译器完全忽略它。但它有严格限制:只能出现在字面量内部、两个数字之间(或基数前缀后、第一个数字前),不能在开头、结尾、小数点旁、指数符号旁。

典型误用是想给变量名或宏加下划线式分隔,比如 int flag_0b1010'1010 —— 这里 ' 不起作用,因为不在字面量中;又或者写成 0b'1010'1010,开头单引号直接触发语法错误。

立即学习“C++免费学习笔记(深入)”;

  • auto mask = 0b1100'0011'1010'0101; ✅(清晰划分字节)
  • double pi = 3.1415'9265'3589; ✅(小数部分也可用)
  • long long ns = 1'000'000'000; ✅(十进制大数更易数位)
  • int bad = 0b1010'; ❌(结尾单引号,报错:error: expected unqualified-id)
  • int also_bad = 0b'1010; ❌(开头单引号,解析失败)

和十六进制/八进制混用时要注意什么?分隔符不改变进制含义

分隔符本身不参与进制判断,0x、0b、0(八进制)这些前缀才决定解释方式。但人眼容易因分隔位置产生误解,尤其当混合使用不同进制字面量做位运算时。

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载

比如 0b1111'0000 & 0xFF 看起来对齐,实际没问题;但若写成 0b1111'0000 & 0xff,小写 ff 在某些老编译器(如旧版 MSVC)可能触发警告,虽然标准允许小写,但团队规范常要求统一为大写。

  • 0b1010'1010 == 0xAA ✅(值相等,但类型推导可能不同:前者是 int,后者是 int,无隐式问题)
  • 0b1010'1010 == 0252 ✅(八进制 0252 也是 170,但可读性差,不推荐)
  • uint8_t flag = 0b1010'1010; ✅(显式类型 + 分隔符,安全)
  • char c = 0b1010'1010; ⚠️(可能溢出,char 通常有符号,最高位为 1 会变成负数)

跨平台兼容性与编译器支持底线

所有主流现代编译器(GCC 4.9+、Clang 3.4+、MSVC 2015+)都完整支持 0b 和 '。但如果你的项目还要兼容 GCC 4.8 或更早版本,就得禁用——它们只支持 C++11,默认不认 0b,且分隔符会直接报错。

检查方法很简单:在 CI 或本地跑 g++ -std=c++14 -x c++ -E /dev/null 看是否能过预处理;或者用 static_assert 捕获:

static_assert(0b1010'1010 == 170, "binary literal broken");

如果构建失败,说明编译器没开 C++14 或版本太低。这时候要么升级工具链,要么改用宏封装(如 #define MASK_8BIT 0xAA),但会损失类型信息和调试体验。

真正容易被忽略的是:分隔符在模板推导和 constexpr 计算中完全透明,但它会让预处理器宏展开变复杂——比如 #define VAL 0b1010'1010 在某些宏拼接场景下可能意外触发 tokenization 错误,遇到就换行或加括号。

热门AI工具

更多
PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

549

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1698

2024.03.01

typedef和define区别
typedef和define区别

typedef和define区别在类型检查、作用范围、可读性、错误处理和内存占用等。本专题为大家提供typedef和define相关的文章、下载、课程内容,供大家免费下载体验。

313

2023.09.26

define的用法
define的用法

define用法:1、定义常量;2、定义函数宏:3、定义条件编译;4、定义多行宏。更多关于define的用法的内容,大家可以阅读本专题下的文章。

619

2023.10.11

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1049

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3380

2023.10.25

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

7239

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3465

2024.08.29

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn