当前位置: 首页 > news >正文

C++容器之位集(std::bitset)

目录

  • 1 概述
  • 2 使用实例
  • 3 接口使用
    • 3.1 constructor
    • 3.2 count_and_size
    • 3.3 test
    • 3.4 any
    • 3.5 none
    • 3.6 all
    • 3.7 set
    • 3.8 reset
    • 3.9 filp
    • 3.10 to_string
    • 3.11 to_ulong
    • 3.12 to_ullong
    • 3.13 operators

1 概述

  位集存储位(只有两个可能值的元素:0或1,true或false,…)。
  该类模拟bool元素的数组,但针对空间分配进行了优化:通常,每个元素只占用一个位(在大多数系统上,这比最小的元素类型char少八倍)。
  每个比特位置都可以单独访问:例如,对于一个名为foo的给定比特集,表达式foo[3]访问其第四个比特,就像正则数组访问其元素一样。但是,因为在大多数C++环境中,没有元素类型是单个位,所以各个元素都是作为特殊引用类型访问的(请参见bitset::reference)。
  位集具有能够从整数值和二进制字符串构造并转换为它们的特性(请参见其构造函数和成员to_ulong和to_string)。它们也可以直接从二进制格式的流中插入和提取(请参阅适用的运算符)。
  位集的大小在编译时是固定的(由其模板参数决定)。对于一个同时优化空间分配并允许动态调整大小的类,请参阅向量的布尔特化(vector<bool>)。

其类图如下:
在这里插入图片描述

2 使用实例

void BitsetSuite::operators()
{std::bitset<4> a (std::string("1001"));std::bitset<4> b (std::string("0011"));TEST_ASSERT_EQUALS("1010", (a ^= b).to_string())//XOR,assignTEST_ASSERT_EQUALS("0010", (a &= b).to_string())//AND,assignTEST_ASSERT_EQUALS("0011", (a |= b).to_string())//OR,assignTEST_ASSERT_EQUALS("1100", (a <<= 2 ).to_string())//Shitf left,assignTEST_ASSERT_EQUALS("0110", (a >>= 1 ).to_string())//Shitf right,assignTEST_ASSERT_EQUALS("1100", (~b).to_string())//NOTTEST_ASSERT_EQUALS("0110", (b << 1 ).to_string())//Shitf leftTEST_ASSERT_EQUALS("0001", (b >> 1 ).to_string())//Shitf leftTEST_ASSERT_EQUALS(false, (a == b))//(0110==0011)TEST_ASSERT_EQUALS(true, (b != a)) //(0011!=0110)TEST_ASSERT_EQUALS("0101", (a ^ b).to_string())//XORTEST_ASSERT_EQUALS("0010", (a & b).to_string())//ANDTEST_ASSERT_EQUALS("0111", (a | b).to_string

相关文章:

  • 3步找回丢失数据,EasyRecovery让数据恢复如此简单!
  • 骆驼大赛
  • Python燃气轮机汽车钢棒整流电路控制图统计模型过程潜力分析
  • Python 机器学习 基础 之 模型评估与改进 【评估指标与评分】的简单说明
  • Flutter 中的 TabBarView 小部件:全面指南
  • FPGA DMA技术分享(赋能高速数据处理的新动力介绍篇)
  • 简单得阴影引导实现
  • 【设计模式】JAVA Design Patterns——Circuit Breaker(断路器模式)
  • 解读makefile中的.PHONY
  • 牛客NC236 最大差值【simple 动态规划 Java/Go/PHP】
  • TypeScript类型体操练习
  • 网络、HTTP、HTTPS、Session、Cookie、UDP、TCP
  • 揭秘Tensor Core黑科技:如何让AI计算速度飞跃
  • mysql8忘记密码重置密码和创建新用户
  • Golang协程和通道
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • CentOS7 安装JDK
  • chrome扩展demo1-小时钟
  • exif信息对照
  • Hibernate最全面试题
  • orm2 中文文档 3.1 模型属性
  • vue学习系列(二)vue-cli
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 从零开始的无人驾驶 1
  • 复杂数据处理
  • 高度不固定时垂直居中
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 使用 QuickBI 搭建酷炫可视化分析
  • 走向全栈之MongoDB的使用
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • # Java NIO(一)FileChannel
  • #include
  • #pragma预处理命令
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (1)常见O(n^2)排序算法解析
  • (2.2w字)前端单元测试之Jest详解篇
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (zt)最盛行的警世狂言(爆笑)
  • (二)c52学习之旅-简单了解单片机
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (转)nsfocus-绿盟科技笔试题目
  • (转)大道至简,职场上做人做事做管理
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .java 9 找不到符号_java找不到符号
  • .net 无限分类
  • .NET 中 GetProcess 相关方法的性能
  • .NET 中让 Task 支持带超时的异步等待
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET开发人员必知的八个网站
  • @requestBody写与不写的情况