0

0

C++ bitset用法详解_C++位操作与二进制数据处理神器

裘德小鎮的故事

裘德小鎮的故事

发布时间:2025-11-28 09:56:02

|

272人浏览过

|

来源于php中文网

原创

bitset是C++中用于处理固定长度二进制位序列的模板类,位于头文件中,支持从整数或字符串初始化,提供test、set、reset、flip等成员函数进行位操作,具备to_ulong、to_ullong、to_string等转换功能,支持按位运算符与流输入输出,适用于状态压缩、标志位管理等场景,兼具效率与可读性。

c++ bitset用法详解_c++位操作与二进制数据处理神器

在C++中,bitset 是一个非常实用的模板类,位于 #include 头文件中,用于高效处理固定长度的二进制位序列。它特别适合进行位操作、状态压缩、标志位管理以及二进制数据的读写与转换。相比原始的位运算操作符(如 &、|、^、~、>),bitset 提供了更直观、安全且易读的接口。

1. bitset 的基本定义与初始化

bitset 是一个模板类,模板参数为表示位数的常量整数,即 bitset 表示一个包含 N 个二进制位的容器,每一位只能是 0 或 1。

常见初始化方式包括:

  • 从整数初始化:bitset b1(255); —— 将整数 255 转为 8 位二进制 11111111
  • 从字符串初始化:bitset b2("11001010"); —— 直接指定每一位
  • 默认初始化:bitset b3; —— 所有位初始化为 0

注意:字符串中的字符必须是 '0' 或 '1',否则会抛出 std::invalid_argument 异常。

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

2. 常用成员函数与操作

bitset 提供了丰富的成员函数来访问和操作每一位或整体值。

讯飞听见会议
讯飞听见会议

科大讯飞推出的AI智能会议系统

下载
  • test(pos):返回第 pos 位的值(true 表示 1,false 表示 0),越界时抛出异常
  • set(pos, val):设置第 pos 位为 val(默认 val=1)
  • reset(pos):将第 pos 位清零(等价于 set(pos, 0))
  • flip(pos):翻转第 pos 位(0 变 1,1 变 0);无参数时翻转所有位
  • to_ulong():将 bitset 转换为 unsigned long 整数
  • to_ullong():转换为 unsigned long long(C++11 起)
  • size():返回位数 N
  • count():返回值为 1 的位的个数(即“汉明权重”)
  • any():是否有任意一位为 1
  • none():是否所有位都为 0
  • operator[]:支持下标访问,b[i] 返回第 i 位的引用,可读可写(但不检查边界)

3. 位运算操作

bitset 支持常见的按位运算符,使得多个 bitset 之间的逻辑操作变得简洁直观。

  • a & b:按位与
  • a | b:按位或
  • a ^ b:按位异或
  • ~a:按位取反
  • a :左移 n 位(低位补 0)
  • a >> n:右移 n 位(高位补 0)

这些运算符返回新的 bitset 对象,不会修改原对象。

4. 字符串与流操作

bitset 可以方便地与字符串和输入输出流交互。

  • to_string():将 bitset 转为 std::string,高位在前
  • 支持直接使用 cout 输出二进制形式
  • 支持从字符串构造,也支持从输入流读取(需注意格式)

例如:

bitset<4> b("1010");
cout << b << endl;        // 输出 1010
cout << b.to_string() << endl;  // 同样输出 1010
cout << b.to_ulong() << endl;   // 输出 10

基本上就这些。bitset 在需要处理标志位、状态机、编码解码、位图等场景中非常高效且清晰。由于其大小在编译期确定,性能接近原生数组,又比手动位运算更安全易读,是 C++ 中进行二进制数据处理的利器。合理使用 bitset,能显著提升代码可维护性和开发效率。不复杂但容易忽略。

相关专题

更多
string转int
string转int

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

312

2023.08.02

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1435

2023.10.24

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1435

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

222

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

84

2025.10.17

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

192

2023.11.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

248

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

205

2023.09.04

桌面文件位置介绍
桌面文件位置介绍

本专题整合了桌面文件相关教程,阅读专题下面的文章了解更多内容。

0

2025.12.30

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.3万人学习

Django 教程
Django 教程

共28课时 | 2.6万人学习

Pandas 教程
Pandas 教程

共15课时 | 0.9万人学习

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

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号