27人参与 • 2025-02-20 • C/C++
c++ 中的 bitset
是一个用于处理固定大小位序列的模板类,提供高效的位操作功能。以下是对其关键特性的详细介绍:
<bitset>
。bitset<n>
表示一个包含 n
位的二进制集合(n
为编译时常量)。bitset<8> b1; // 默认初始化,所有位为0 bitset<4> b2(5); // 用整数初始化:0101 bitset<4> b3("1010"); // 用字符串初始化:1010 bitset<4> b4(b3); // 拷贝构造
bitset<3> b(10); // 10的二进制为1010 → 截断为010(值为2)
'0'
和 '1'
。bitset<4> b("1010"); // 高位 → 低位:1 0 1 0 → 十进制10 bitset<4> b("101010", 2, 4); // 从索引2取4位:"1010" → 值为10
位访问:
[]
运算符:通过索引访问(从右到左,0为最低位)。test(pos)
:检查指定位是否为1,越界抛出异常。bitset<4> b("1010"); bool bit0 = b[0]; // 0 → 最低位 bool bit3 = b[3]; // 1 → 最高位
修改位:
set(pos, val)
:设置某位(默认1)。reset(pos)
:清除某位(设为0)。flip(pos)
:翻转某位。b.set(0); // 1010 → 1011 b.reset(3); // 1011 → 0011 b.flip(1); // 0011 → 0001
统计与判断:
count()
:返回1的个数。any()/none()/all()
:判断是否存在/没有/全部为1。if (b.any()) cout << "至少1位为1";
&
、|
、^
、~
、<<
、>>
等运算符(长度需相同):bitset<4> a("1010"), b("1100"); auto c = a & b; // 1000 auto d = a << 1; // 0100
to_ulong()/to_ullong()
:转为无符号整数(可能溢出)。to_string()
:转为字符串,可指定填充字符。bitset<4> b(10); string s = b.to_string(); // "1010"
#include <bitset> #include <iostream> using namespace std; int main() { bitset<8> b1(42); // 00101010 bitset<8> b2("10101010"); // 10101010 cout << b1 << endl; // 输出 00101010 b1.set(0); // 变为 00101011 b2.flip(); // 变为 01010101 cout << (b1 & b2) << endl; // 00000001 cout << b1.to_ulong() << endl; // 43 return 0; }
test(pos)
会检查越界,[]
不会。bitset
是处理二进制数据的利器,结合明确的位序规则和丰富的接口,可显著简化位级操作代码。
到此这篇关于c++中bitset的常见用法的文章就介绍到这了,更多相关c++ bitset用法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论