bitset详解以及用法

2024-06-18 14:12
文章标签 详解 用法 bitset

本文主要是介绍bitset详解以及用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

butset详解以及用法

bitset是C++ 标准库中的一个类,它提供了一种方便的方式来操作位序列,常用于位运算和状态压缩。下面我将为您详细介绍 bitset 的基本概念、基本用法以及一些常用的成员函数。

基本概念

1、bitset 可以看作是一个多位二进制数,其每一位都是 0 或 1。
2、它是一个固定大小的容器,可以存储指定数量的位。
3、由于 bitset 支持基本的位运算,因此它非常适合用于状态压缩和表示一组布尔值。

基本用法

定义

bitset<N> b; // 定义一个 N 位的 bitset,所有位初始化为 0

N是正整数表示bitset的大小

位运算操作符

1、~b:对 b 中的每一位取反。
2、b1 & b2、b1 | b2、b1 ^ b2:对两个位数相同的 bitset 执行按位与、或、异或运算。
3、b << n、b >> n:将 b 左移或右移 n 位(右侧或左侧补零)。
4、b1 == b2、b1 != b2:比较两个位数相同的 bitset 是否相等。

访问和修改位

b[k]:访问或修改 b 的第 k 位(从 0 开始计数)。

成员函数

1、b.count():返回 b 中设置为 1 的位数。
2、b.any():如果 b 中至少有一位为 1,则返回 true;否则返回 false。
3、b.none():如果 b 中的所有位都为 0,则返回 true;否则返回 false。
4、b.set():将 b 中的所有位设置为 1。
5、b.set(k, v):将 b 的第 k 位设置为 v(v 为 true 或 false)。
6、b.reset():将 b 中的所有位设置为 0。
7、b.reset(k):将 b 的第 k 位设置为 0。
8、b.flip():将 b 中的所有位取反。
9、b.flip(k):将 b 的第 k 位取反。
10、b.to_ulong()、b.to_ullong():将 bitset 转换为 unsigned long 或 unsigned long long 类型的整数(注意转换时的位数限制)。

类型转换

1、数字转换为 bitset:将数字转换为二进制,并存储在 bitset 中。如果数字的二进制位数小于 bitset 的大小,则在前面补零;如果大于 bitset 的大小,则只取最低的 N 位。
2、字符串转换为 bitset:字符串只能包含 0 和 1,否则会报错。

注意事项

1、bitset 的长度是固定的,在定义时需要指定。
2、bitset 适用于小规模的位运算和状态压缩,如果规模较大,可能需要考虑其他数据结构或方法。
3、bitset 底层是通过数组来实现的,每个元素占用 1 位空间,但每 8 位(一个字节)实际上会占用一个字节的存储空间。

这篇关于bitset详解以及用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1072217

相关文章

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

SpringBoot AspectJ切面配合自定义注解实现权限校验的示例详解

《SpringBootAspectJ切面配合自定义注解实现权限校验的示例详解》本文章介绍了如何通过创建自定义的权限校验注解,配合AspectJ切面拦截注解实现权限校验,本文结合实例代码给大家介绍的非... 目录1. 创建权限校验注解2. 创建ASPectJ切面拦截注解校验权限3. 用法示例A. 参考文章本文

Java中字符编码问题的解决方法详解

《Java中字符编码问题的解决方法详解》在日常Java开发中,字符编码问题是一个非常常见却又特别容易踩坑的地方,这篇文章就带你一步一步看清楚字符编码的来龙去脉,并结合可运行的代码,看看如何在Java项... 目录前言背景:为什么会出现编码问题常见场景分析控制台输出乱码文件读写乱码数据库存取乱码解决方案统一使

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志