首页 > 编程语言 >C++ 标准模板库(STL)——bitset的使用

C++ 标准模板库(STL)——bitset的使用

时间:2024-12-04 18:04:33浏览次数:11  
标签:std 函数 STL C++ bitset bset1 bset cout

目录

一、问题

二、定义和初始化

三、访问元素

四、修改元素

五、成员函数

1、count()函数

2、size()函数

3、test()函数

4、any()函数

5、none()函数

6、all()函数

7、to_string()函数

8、to_ulong() 和 to_ullong()

六、运算符

七、总结


一、问题

std::bitset 是 C++ 标准模板库(STL)中的一个模板类,用于表示和操作固定大小的二进制序列(即一组位)。std::bitset 提供了一些成员函数和运算符,使得对二进制数据的操作变得非常方便。以下是对 std::bitset 的详细使用

二、定义和初始化

1、std::bitset 的定义需要指定一个大小(即位数)

#include <bitset>
#include <iostream>

int main()
{
    std::bitset<8> bset; // 定义一个8位的bitset
    return 0;
}

2、默认构造函数

std::bitset<8> bset; // bset = 00000000

3、使用整数初始化

// bset1 = 00001100 (12的二进制表示)
std::bitset<8> bset1(12); 

4、使用字符串初始化

字符串中的字符必须是 '0' 或 '1'。

// bset2 = 00001100
std::bitset<8> bset2("1100");

三、访问元素

访问单个位:使用 operator[] 访问某个位,返回值是一个 std::bitset::reference 对象,该对象可以自动转换为 bool 值。

std::bitset<8> bset(12); // bset = 00001100
bool bit = bset[2]; // bit = 1 (从右往左数,第3位)

四、修改元素

通过 operator[] 返回的 std::bitset::reference 对象,可以直接修改位。

bset[2] = 0; // bset = 00001000

五、成员函数

1、count()函数

返回二进制表示中值为1的位的数量

std::bitset<8> bset(12); // bset = 00001100
std::cout << bset.count() << std::endl; // 输出 2
2、size()函数

返回 bitset 的大小(位数)

std::cout << bset.size() << std::endl; // 输出 8
3、test()函数

测试某个位是否为1

bool bit_status = bset.test(2); // 测试第3位是否为1
std::cout << bit_status << std::endl; // 输出 0
4、any()函数

检查是否有任何位为1

std::bitset<8> bset3(0); // 所有位都是0
std::cout << bset3.any() << std::endl; // 输出 0 (false)
5、none()函数

检查是否所有位都为0

std::cout << bset3.none() << std::endl; // 输出 1 (true)
6、all()函数

检查是否所有位都为1

std::bitset<8> bset4(255); // bset4 = 11111111
std::cout << bset4.all() << std::endl; // 输出 1 (true)
7、to_string()函数

返回 bitset 的二进制表示,以字符串形式

std::string str = bset.to_string(); // str = "00001000"
std::cout << str << std::endl;
8、to_ulong() 和 to_ullong()

返回 bitset 的无符号长整型或无符号长长整型表示(仅当 bitset 的大小适合时才有效)

unsigned long val = bset.to_ulong(); // val = 8
std::cout << val << std::endl;

六、运算符

std::bitset 支持一些常见的位运算符,如 &(按位与)、|(按位或)、^(按位异或)、~(按位取反)、<<(左移)、>>(右移)、==(等于)、!=(不等于)。

std::bitset<8> bset1(12); // bset1 = 00001100
std::bitset<8> bset2(5);  // bset2 = 00000101

std::bitset<8> bset3 = bset1 & bset2; // bset3 = 00000100
std::bitset<8> bset4 = bset1 | bset2; // bset4 = 00001101
std::bitset<8> bset5 = bset1 ^ bset2; // bset5 = 00001001
std::bitset<8> bset6 = ~bset1;        // bset6 = 11110011
std::bitset<8> bset7 = bset1 << 2;    // bset7 = 00110000
std::bitset<8> bset8 = bset1 >> 2;    // bset8 = 00000011

七、总结

std::bitset 提供了一种非常方便的方式来表示和操作固定大小的二进制数据。它提供了丰富的成员函数和运算符,使得对二进制数据的操作变得直观和高效。

标签:std,函数,STL,C++,bitset,bset1,bset,cout
From: https://blog.csdn.net/zhu_ing/article/details/144131629

相关文章

  • 蓝桥杯准备训练(lesson2 ,c++)
    3.1字符型char//character的缩写在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,字符是⽤单引号括起来的,如:‘a’,‘b’,‘@’。为了能说明这些字符,给他们抽象出⼀种类型,就是字符型,C语⾔中就是char。ASCII编码我们知道在计算机中所有的数据都......
  • 蓝桥杯准备训练(lesson1,c++方向)
    前言报名参加了蓝桥杯(c++)方向的宝子们,今天我将与大家一起努力参赛,后序会与大家分享我的学习情况,我将从最基础的内容开始学习,带大家打好基础,在每节课后都会有练习题,刚开始的练习题难度很低,但希望大家也简单的做一下,防止与课程脱节,最后希望大家都能取得好成绩。1、工具安装......
  • 【C++入门】【六】
    本节目标一、继承的概念及定义二、基类和派生类对象赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员七、复杂的菱形继承及菱形虚拟继承八、继承的总结和反思九、笔试面试题一、继承的概念及定义1.继承的概念继承......
  • 打卡信奥刷题(360)用C++工具信奥P3353[普及组/提高] 在你窗外闪耀的星星
    在你窗外闪耀的星星题目背景飞逝的的时光不会模糊我对你的记忆。难以相信从我第一次见到你以来已经过去了3年。我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室,你将头向后仰,柔和的晚霞照耀着你玫瑰色的脸颊。我明白,我已经沉醉于你了。之后,经过几个月......
  • Python扩展C/C++ 实现原理分析
    Python扩展C/C++实现原理分析https://blog.csdn.net/HaoBBNuanMM/article/details/112243129?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522ab2ac79057d38453c0328d6726560514%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request......
  • 《 C++ 点滴漫谈: 六 》不可改变的力量:const 编程世界的安全卫士
    摘要const关键字是C++中不可或缺的组成部分,其核心作用在于提升代码的安全性、可读性和性能优化能力。本文深入剖析了const的基本概念及其在变量、函数、指针、引用和类中的具体应用,同时详细解析了const_cast的用法与潜在风险。此外,文章探讨了const的优势与局限,为......
  • C++ ——— 引用的概念以及特性
    引用的概念引用不是新定义一个变量,而是给已存在的变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间引用的关键字:&引用的基本语法:inta=0;int&b=a;在内存中开辟了一块空间,这块空间的名字为a,并且在这块空间里存储了0这个值......
  • C++项目提示“error MSB4019: 找不到导入的项目”
    报错:C:\Users\DELL\Desktop\PDManager-20240912(1)\PDManager\PDManager\PDManager.vcxproj(66,5):errorMSB4019:找不到导入的项目“D:\VisualStudio\2022\Community\MSBuild\Microsoft\VC\v170\BuildCustomizations\CUDA11.6.props”。请确认Import声明“D:\Visual......
  • 【C++】sort
    sort基本功能在C++算法库中,sort函数主要用于对给定范围内的元素进行排序。它是一种高效的排序算法,通常基于快速排序(QuickSort)的思想实现,并且在某些情况下会自动切换到插入排序(InsertionSort)以优化性能。头文件需要包含才能使用sort函数。函数原型最常用的形式......
  • C++“阴熊”大追杀0.1.1测试版正式出台!
    C++“阴熊”大追杀0.1.1测试版正式出台!框架已搭好,欢迎大家提出意见!老规矩,先上代码:#include<bits/stdc++.h>#include<windows.h>#include<conio.h>#defineFOREGROUND_WHITEFOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUEusingnamespacestd;shortteach;long......