您的位置:首页 > 教育 > 培训 > 空间资源_家装装饰设计_优化网络搜索引擎_google年度关键词

空间资源_家装装饰设计_优化网络搜索引擎_google年度关键词

2025/9/20 19:38:17 来源:https://blog.csdn.net/qq_49443542/article/details/143148849  浏览:    关键词:空间资源_家装装饰设计_优化网络搜索引擎_google年度关键词
空间资源_家装装饰设计_优化网络搜索引擎_google年度关键词

在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「C/C++」C/C++程序设计
📚全部专栏
「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合
「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发
「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明

目录

      • std::bitset:C++中的位操作利器(支持C++11及以上版本)
        • 一、`std::bitset`简介与支持版本
        • 二、`std::bitset`的基本特性
        • 三、`std::bitset`的构造与初始化
        • 四、`std::bitset`的常用操作
        • 五、`std::bitset`的应用场景
        • 六、总结

std::bitset:C++中的位操作利器(支持C++11及以上版本)

在C++编程中,处理二进制数据是一个常见且重要的任务。为了简化这一任务,C++11标准引入了std::bitset类模板,它允许程序员以固定大小的位集合形式来存储和操作二进制数据。本文将详细介绍std::bitset的用法,包括其支持的C++版本、基本特性、常用操作以及代码示例。

在这里插入图片描述

一、std::bitset简介与支持版本

std::bitset是C++标准库中的一个模板类,定义在<bitset>头文件中。它根据模板参数指定的位数来创建一个位集合,这个固定长度在创建对象时指定,并且不能在运行时更改。std::bitset提供了丰富的成员函数来访问和修改位集合中的位,以及进行位运算和集合运算。需要注意的是,std::bitset是在C++11标准中引入的,因此它支持C++11及更高版本的编译器。

二、std::bitset的基本特性
  1. 固定长度std::bitset的长度在编译时确定,不能动态改变,这有助于防止溢出和错误。
  2. 类型安全:与直接使用整数进行位操作相比,std::bitset提供了类型安全的位操作,减少了出错的可能性。
  3. 易读性std::bitset提供了将位集合转换为二进制字符串的功能,使得输出和调试更加直观。
  4. 丰富的成员函数std::bitset提供了丰富的成员函数来访问、修改和操作位集合,使得编程更加便捷。
三、std::bitset的构造与初始化

std::bitset可以通过多种方式构造和初始化,包括无参构造、使用二进制整数初始化、使用二进制字符串初始化以及使用另一个std::bitset对象初始化。

代码示例

#include <iostream>
#include <bitset>int main() {// 无参构造,所有位初始化为0std::bitset<8> b1;std::cout << "b1: " << b1 << std::endl; // 输出:b1: 00000000// 使用二进制整数初始化(注意:这里使用的是十进制字面量,但二进制表示是0b10101010)std::bitset<8> b2(170); // 170的二进制表示是10101010std::cout << "b2: " << b2 << std::endl; // 输出:b2: 10101010// 使用二进制字符串初始化(注意:字符串中的字符只能是'0'或'1')std::bitset<8> b3("1100"); // 字符串长度不足,高位补0std::cout << "b3: " << b3 << std::endl; // 输出:b3: 00001100// 使用另一个std::bitset对象初始化std::bitset<8> b4(b2);std::cout << "b4: " << b4 << std::endl; // 输出:b4: 10101010return 0;
}

PS:以下在for循环遍历的时候是从右边开始为下标0

#include <iostream>
#include <bitset>int main() {std::bitset<8> b5 = 0b10101010;std::cout << "b5: " << b5 << std::endl; // 输出:b5: 10101010for(int i = 0; i < b5.size(); i++)// Ps:这是从右边开始为下标0{std::cout << b5[i] << std::endl;// 输出:b5: 01010101 }return 0;
}
四、std::bitset的常用操作

std::bitset提供了丰富的成员函数来访问和修改位集合中的位,以及进行位运算和集合运算。

代码示例

#include <iostream>
#include <bitset>int main() {std::bitset<8> b1(170); // 170的二进制表示是10101010// 访问位bool bit0 = b1[0]; // 访问第0位,返回false(0)bool bit4 = b1[4]; // 访问第4位,返回true(1)std::cout << "bit0: " << bit0 << ", bit4: " << bit4 << std::endl;// 修改位b1.set(1); // 将第1位设置为1b1.reset(4); // 将第4位重置为0std::cout << "After set(1) and reset(4): " << b1 << std::endl;// 取反位b1.flip(0); // 将第0位取反std::cout << "After flip(0): " << b1 << std::endl;// 位运算std::bitset<8> b2(85); // 85的二进制表示是01010101std::bitset<8> b3 = b1 & b2; // 按位与std::bitset<8> b4 = b1 | b2; // 按位或std::bitset<8> b5 = b1 ^ b2; // 按位异或std::bitset<8> b6 = ~b1; // 按位取反std::cout << "b3 (AND): " << b3 << std::endl;std::cout << "b4 (OR): " << b4 << std::endl;std::cout << "b5 (XOR): " << b5 << std::endl;std::cout << "b6 (NOT): " << b6 << std::endl;// 转换为无符号整数unsigned long num = b1.to_ulong();std::cout << "b1 to unsigned long: " << num << std::endl;// 统计置位(值为1)的位数std::size_t count = b1.count();std::cout << "Number of set bits in b1: " << count << std::endl;return 0;
}
五、std::bitset的应用场景
  1. 状态存储:使用std::bitset来存储程序的状态信息,如开关状态、标志位等。
  2. 权限控制:使用std::bitset来表示用户的权限信息,通过位运算来检查或修改权限。
  3. 位运算操作:在需要进行位运算的场景中,使用std::bitset可以简化代码并提高可读性。
  4. 数据压缩:在需要存储大量二进制数据的场景中,使用std::bitset可以节省存储空间并提高数据访问效率。
六、总结

std::bitset是C++11及更高版本中引入的一个非常有用的类模板,它提供了一种方便的方式来处理二进制数据,并提供了丰富的成员函数来访问和修改位集合中的位。通过合理使用std::bitset,程序员可以简化代码、提高可读性并优化性能。无论是在状态存储、权限控制还是位运算操作中,std::bitset都是一个不可或缺的工具。希望本文能够帮助读者更好地理解和使用std::bitset


在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com