二进制 bitset类型
教程导读
学研发网的这篇信息学奥赛技术教程文章主要介绍了二进制 bitset类型,现在分享给大家,供学习和参考。文章包含2209字,纯文字阅读大概需要6分钟。
教程信息
bitset模拟了一个bool类型的数组(只能存0和1),但是优化了内存空间,使每个元素的存储空间仅占1bit(一个二进制位)。
1、定义与初始化
(1)bitset<8> bits;//定义一个长度为8的二进制序列,无初始化。
(2)bitset<8> a(3);//定义一个长度为8的二进制序列,存3的二进制形式。
(3)bitset<8> b=4;//定义一个长度为8的二进制序列,存4的二进制形式。
(4)bitset<8> c("00000011");//定义一个长度为8的二进制序列,存"0000 0011"的二进制形式。
1、定义与初始化
bitset的初始化需要注意以下问题
(1)bitset<3> d(8);
存8的二进制1000。如果int类型初始化,bitset长度不够,从后往前尽可能存,即存000
(2)bitset<3> e("00000011");
存"0000 0011"的二进制形式。如果string初始化,bitset长度不够,从前往后尽可能存,即存000
(3)bitset<8> f(-1);
存-1的二进制形式(1111 1111)。bitset如果int类型初始化,本质上存的是补码(注意负数!)我们很少bitset处理负数的二进制。
2、输入和输出
(1)输出:
cout<<bits<<endl;//输出bits内部的二进制序列(正序的)
(2)输入:
一般不直接输入bitset,而是输入整型或string后,用其为bitset赋值
①bits=10;//输入一个int
②bits=stoi("10");//输入一个string,注意不能直接使用string为bitset赋值
③cout<<bits;
3、遍历
可以使用for循环遍历bitset,用[i]访问bitset元素
for (int i = 0; i < bits.size(); i++) cout << bits[i] << " "; //注意bitset实际上是逆序存放的(相对于放入int和string而言)
样例1:
#include<iostream> using namespace std; int main() { bitset < 8 > bits; bits = 10; //输入一个int(00001010) for (int i = 0; i < bits.size(); i++) { cout << bits[i] << " "; } return 0; }
执行结果:
样例2
#include<iostream> using namespace std; int main() { bitset < 8 > bits("10101010"); for (int i = 0; i < bits.size(); i++) { cout << bits[i] << " "; } return 0; }
执行结果:
4、比较与判断
(1)比较
if (a == b) //比较二进制串a和b,是否完全相同 cout << "yes"; if (a != b) //比较二进制串a和b,是否存在差异 cout << "yes";
(2)判断
cout << bits.all() << " " << bits.any() << " " << bits.none(); //all判断二进制序列是否全1,ang判断是否有1,none判断是否无1。返回值都是bool cout << bits.count(); //判断bitset中有几个1,返回值是int
5、修改
(1)bits.set(0);//把下标0的位置置为1
(2)bits.reset(1);//把下标1的位置置为0
(3)bits.flip(2);//把下标2的位置翻转(0->1,1->0)
(4)bitset与位运算结合
bits &= 3; //按位与。等价于bits=bits&a; 参与运算的类型是bitset或者整数 bits |= a; //按位或。参与运算的类型是bitset或者整数 ~bits; //按位非 bits ^= a; //按位异或。参与运算的类型是bitset或者整数 bits <<= 1; //左移bits=bits<<1; bits >>= 2; //右移bits=bits<<1;
6、辅助函数
(1)cout<<bits.size();
//返回该二进制序列的长度
(2)string s=bits.to_string();
//把二进制序列转成字符串
(3)unsigned long long n=bits.to_ullong();
//把二进制序列转成对应的整数。
unsigned long m=bits.to_ulong();
和位运算相比,bitset的优势是更直观,直接以数组元素的形式来模拟二进制位操作,并且支持使用位运算操作bitset
但是,bitset的操作中不涉及四则运算,而位运算可以与四则运算混合进行
教程咨询
如果章节内容看不懂,可以联系作者。
教程总结
以上是学研发网为您提供二进制 bitset类型的全部内容,希望教程文章能够帮你了解学习二进制 bitset类型,解决所遇到的问题。 如果觉得学研发网信息学奥赛教程内容还不错,欢迎将学研发网网站推荐给身边需要的人。
教程备注
版权声明:教程内容为学研发网整理和编写,如需转载请联系站长并附上文章原始链接和原始作者信息。
手机阅读
扫描二维码推送至手机访问。
本文链接:http://www.xueyanfa.com/xinaojiaocheng/xinaogaoji-278.html