c++中bitset的常见用法
C++ 中的 bitset 是一个用于处理固定大小位序列的模板类,提供高效的位操作功能。以下是对其关键特性的详细介绍:
1. 声明与初始化
- 头文件:需包含
<bitset>。 - 声明:
bitset<N>表示一个包含N位的二进制集合(N为编译时常量)。bitset<8> b1; // 默认初始化,所有位为0
bitset<4> b2(5); // 用整数初始化:0101
bitset<4> b3("1010"); // 用字符串初始化:1010
bitset<4> b4(b3); // 拷贝构造
2. 初始化规则
- 整数初始化:高位截断,低位对齐。
bitset<3> b(10); // 10的二进制为1010 → 截断为010(值为2)
- 字符串初始化:
- 字符串只能包含
'0'和'1'。 - 默认从字符串的 左端(高位) 开始解析。
bitset<4> b("1010"); // 高位 → 低位:1 0 1 0 → 十进制10
bitset<4> b("101010", 2, 4); // 从索引2取4位:"1010" → 值为10
- 字符串只能包含
3. 常用操作
位访问:
[]运算符:通过索引访问(从右到左,0为最低位)。test(pos):检查指定位是否为1,越界抛出异常。
bitset<4> b("1010");
bool bit0 = b[0]; // 0 → 最低位
bool bit3 = b[3]; // 1 → 最高位
修改位:
set(pos, val):设置某位(默认1)。reset(pos):清除某位(设为0)。flip(pos):翻转某位。
b.set(0); // 1010 → 1011
b.reset(3); // 1011 → 0011
b.flip(1); // 0011 → 0001
统计与判断:
count():返回1的个数。any()/none()/all():判断是否存在/没有/全部为1。
if (b.any()) cout << "至少1位为1";
4. 位运算
- 支持
&、|、^、~、<<、>>等运算符(长度需相同):bitset<4> a("1010"), b("1100");
auto c = a & b; // 1000
auto d = a << 1; // 0100
5. 类型转换
to_ulong()/to_ullong():转为无符号整数(可能溢出)。to_string():转为字符串,可指定填充字符。bitset<4> b(10);
string s = b.to_string(); // "1010"
6. 应用场景
- 位标志管理:如权限控制、状态标记。
- 位掩码操作:快速筛选或修改特定位。
- 数据压缩:高效存储布尔值。
示例代码
#include <bitset>
#include <iostream>
using namespace std;
int main() {
bitset<8> b1(42); // 00101010
bitset<8> b2("10101010"); // 10101010
cout << b1 << endl; // 输出 00101010
b1.set(0); // 变为 00101011
b2.flip(); // 变为 01010101
cout << (b1 & b2) << endl; // 00000001
cout << b1.to_ulong() << endl; // 43
return 0;
}
注意事项
- 越界访问:
test(pos)会检查越界,[]不会。 - 性能:位操作高效,适合密集运算。
- 字符串顺序:字符串的第一个字符对应高位。
bitset 是处理二进制数据的利器,结合明确的位序规则和丰富的接口,可显著简化位级操作代码。
c++中bitset的常见用法的更多相关文章
- Guava中Predicate的常见用法
Guava中Predicate的常见用法 1. Predicate基本用法 guava提供了许多利用Functions和Predicates来操作Collections的工具,一般在 Iterabl ...
- JAVA中enum的常见用法
JAVA中enum的常见用法包括:定义并添加方法.switch.遍历.EnumSet.EnumMap 1.定义enum并添加或覆盖方法 public Interface Behaviour{ void ...
- Java中枚举的常见用法
在JDK1.5以后引入了一种新的类型,就是枚举(enum).enum是用来声明枚举类型数据,它可以像数组一样存储许多的元素,但是不同于数组的是,它除了数字不能存储以外, 其他类型的如字母.特殊符号.汉 ...
- (转)轻松掌握shell编程中数组的常见用法及示例
缘起:在老男孩进行linux培训shell编程教学中,发现不少水平不错的网友及同学对数组仍然很迷糊,下面就给大家分享下数组的用法小例子,希望能给大家一点帮助.其实SHELL的数组很简单,好用.我们学习 ...
- Objective-C中#define的常见用法
参考博客 http://blog.csdn.net/kindazrael/article/details/8108868 在C语言中,预处理代码是非常强大的工具,能让代码变得可读性和可维护性更强.预处 ...
- 转:VC中MessageBox的常见用法
一.关于MessageBox 消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合. 1.MessageBox("这是一个最简单的 ...
- VC中MessageBox的常见用法
一.关于MessageBox 消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合. 1.MessageBox("这是一个最简单的 ...
- K:java中枚举的常见用法
用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.....现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. ...
- VC++中MessageBox的常见用法详解
消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合. 1.MessageBox("这是一个最简单的消息框!"); ...
- Objective-C中Block的常见用法
typedef int(^AddValue)(int,int); int main(int argc, const char * argv[]) { @autoreleasepool { //1:NS ...
随机推荐
- 在自家的代码生成工具中,增加对跨平台WxPython项目的前端代码生成,简直方便的不得了
在经过长时间对WxPython的深入研究,并对其构建项目有深入的了解,以及完成对基础框架的完整改写后,终于在代码生成工具完全整合了基于 Python 跨平台方案项目的代码快速生成了,包括基于FastA ...
- HTML5 多媒体
1.互联网上的音频 直到现在,仍然不存在一项旨在网页上播放音频的标准. 今天,大多数音频是通过插件(比如 Flash)来播放的.然而,并非所有浏览器都拥有同样的插件. HTML5 规定了在网页上嵌入音 ...
- base64计算文件大小方法(C#和js)
base64文件大小计算 有时候图片被base64之后需要计算图片大小,因为被编码后全是字符,计算文件大小可以反序列化成文件之后再获取大小,但是会比较麻烦.简单介绍一种利用base64编码原理计算大小 ...
- 使用Tailwind CSS的几个小Tips
前情 Tailwind CSS 是一个原子类 CSS 框架,它将基础的 CSS 全部拆分为原子级别.它的工作原理是扫描所有 HTML 文件.JavaScript 文件以及任何模板中的 CSS 类名,然 ...
- Llama 3.2 900亿参数视觉多模态大模型本地部署及案例展示
Llama 3.2 900亿参数视觉多模态大模型本地部署及案例展示 本文将介绍如何在本地部署Llama 3.2 90B(900亿参数)视觉多模态大模型,并开发一些Use Case,展示其强大的视觉理解 ...
- 『玩转Streamlit』--集成Plotly
之前介绍了如何在Streamlit App中使用Matplotlib库来绘图. 本篇介绍 Steamlit结合Poltly的方法,相比于Matplotlib,Poltly的交互性更强, 更适合在Web ...
- Qt/C++音视频开发70-无感切换通道/无缝切换播放视频/多通道流畅切换/不同视频打开无缝切换
一.前言 之前就写过这个方案,当时做的是ffmpeg内核版本,由于ffmpeg内核解析都是代码实现,所以无缝切换非常完美,看不到丝毫的中间切换过程,看起来就像是在一个通道画面中.其实这种切换只能说是取 ...
- Qt编写可视化大屏电子看板系统18-柱状分组图
一.前言 柱状分组图是柱状堆积图的衍生或者另外一种展示效果,设置的数据值数据源集合完全一样,只不过就是把柱子给拿下来了放在旁边,然后一个分组多个柱子横向排列,不同分组之间有一定的空隙隔开,默认QCus ...
- [转]GMM:高斯混合模型讲义(台湾)
- 使用format_obproxy_digest_log工具分析obproxy网络层耗时SQL
之前写过一个博客,介绍 ob_tools包 来实施抓取 observer 层的 gv$ob_sql_audit 的SQL,还提供一些分析SQL来通过不同维度分析缓慢的业务SQL语句,免得和应用扯皮说数 ...