STL标准模板库之<bitset>

文章目录

    • 测试环境
    • bitset介绍
    • 头文件
    • 模块类定义
    • 对象构造
    • 元素访问
    • 置位和清除
    • 转换为字符串
    • 其他函数

测试环境

系统:ubuntu 22.04.2 LTS 64位
gcc版本:11.3.0
编辑器:vsCode 1.76.2

bitset介绍

  1. bitset表示一个N位的固定大小的序列。可以用于标准的逻辑运算操作。
  2. 可以与字符串和整数相互转化

头文件

#include 

模块类定义

_Nb:表示存储的位的数量

template<size_t _Nb> class bitset {};

对象构造

//构造函数
//1、无参构造函数
std::bitset<8> bsTest1;
std::cout << bsTest1 << std::endl;
//2、使用整形值作为参数进行构造
std::bitset<8> bsTest2(35);
std::cout << bsTest2 << std::endl;
std::bitset<8> bsTest3(0x0f);
std::cout << bsTest3 << std::endl;
//3、使用二进制字符串进行构造
//3.1、使用整个字符串进行构造
std::string strTest1("01100101");
std::bitset<8> bsTest4(strTest1);
std::cout << bsTest4 << std::endl;
//3.2、从字符串的指定位置开始构造
std::bitset<8> bsTest5(strTest1, 2);
std::cout << bsTest5 << std::endl;
//3.3、从字符串的指定位置开始,使用嗯指定数量个字符构造
std::bitset<8> bsTest6(strTest1, 2, 4);
std::cout << bsTest6 << std::endl;

元素访问

函数名 返回值 功能
[] 指定位的值 访问指定位置元素的值
test() 布尔值 访问指定位置元素的值,1则返回true,0则返回false
any() 布尔值 bitset中有位被置1则返回true,否则返回false
all() 布尔值 判断bitset中是不是全部被置1, 是则返回true,否则返回false
none() 布尔值 判断bitset中是不是全部没有被置位,是则返回true,否则返回false
//元素访问
//1、使用下标符遍历所有元素
std::bitset<8> bsTest7(77);
for (int i = 0; i < 8; i++)
{
    std::cout << bsTest7[i] << std::endl;
}
//2、判断指定位置是否被置位
std::bitset<8> bsTest8(0x71);
std::cout << std::boolalpha << bsTest8.test(4) << " " << bsTest8.test(7) << std::endl;
//3、判断是否所有位都被置位
std::bitset<8> bsTest9(0xff);
std::cout << std::boolalpha << bsTest9.all() << std::endl;
bsTest9.reset();
bsTest9.set(4);
std::cout << std::boolalpha << bsTest9.all() << std::endl;
//4、判断是否所有位都没有被置位
bsTest9.reset();
std::cout << std::boolalpha << bsTest9.none() << std::endl;
bsTest9.set(0);
std::cout << std::boolalpha << bsTest9.none() << std::endl;
//5、判断是否有位被置位
std::cout << std::boolalpha << bsTest9.any() << std::endl;
bsTest9.reset();
std::cout << std::boolalpha << bsTest9.any() << std::endl;

置位和清除

函数 返回值 功能
set() bitset引用 将所有位都置位或将指定位置位
reset() bitset引用 取消所有位置位或将指定位取消置位
 //置位和清除置位
std::bitset<8> bsTest10;
//1、将指定位置位
bsTest10.set(3);
std::cout << bsTest10 << std::endl;
//2、将所有位置位
bsTest10.set();
std::cout << bsTest10 << std::endl;
//3、清除指定位置位
bsTest10.reset(4);
std::cout << bsTest10 << std::endl;
//4、清除所有位置位
bsTest10.reset(); 
std::cout << bsTest10 << std::endl;

转换为字符串

函数 返回值 功能
to_string() 字符串 将bitset值转换为字符串
//字符串转换
bsTest10 = 0x37;
//1、转换为2进制字符串输出
std::cout << bsTest10.to_string() << std::endl;
//2、使用自定义字符替换0或1
std::cout << bsTest10.to_string('x') << std::endl;
std::cout << bsTest10.to_string('0', '*') << std::endl;
//3、字符串转换为整形值
std::cout << bsTest10.to_ulong() << std::endl;

其他函数

函数名 返回值 功能
count() std::size_t 统计被置位元素的数量
flip() bitset引用 进行位翻转
//1、统计置位元素数量
std::cout << bsTest10.count() << std::endl;
//2、进行位翻转
std::cout << bsTest10 << std::endl;
std::cout << bsTest10.flip() << std::endl;

std::bitset<8> bsTest11("11010001");
std::bitset<8> bsTest12("01100011");
//3、按位与
std::cout << (bsTest11 & bsTest12) << std::endl;
//4、按位或
std::cout << (bsTest11 | bsTest12) << std::endl;
//5、按位异或
std::cout << (bsTest11 ^ bsTest12) << std::endl;

你可能感兴趣的:(STL标准模板库,c++,开发语言)