您的位置:首页 > 编程语言 > C语言/C++

C++STL bitset介绍与使用方法

2016-12-15 13:30 621 查看

bitset

bitset主要是用于存储二进制位,在需要大量二进制计算的项目中,直接使用bitset比利用数组或者其它方式要更为方便,位运算在存储状态、模拟行动、搜索很多方面有非常巨大的优势

头文件:#include

构造函数

bitset<16> first;  //构造一个16位的bitset对象,初始值默认为0
bitset<16> second(177);  //构造一个16位的bitset对象,将177转换为二进制,拷贝到内存空间
bitset<16> secont_m(Oxff20);  //整型常量,可以直接十进制,也可以八进制,十六进制
bitset<16> third("1110011");  //将二进制字符串初始化到对象中
bitset<6> second_t(177);
bitset<6> third_t("1110011");

cout << first << endl;
cout << second << endl;
cout << third << endl;
cout << second_t << endl;
cout << third_t << endl;

for (int i = 0; i < 16; i++)
{
cout << second[i];
}

//输出
/*
0000000000000000
0000000010110001
0000000001110011
110001
111001
1000110100000000
//由于bitset重载输出定向符号,为了便于查看,这里输出是逆向输出,长度为n的bitset,是按照n-1——>0的顺输出
*/


需要注意以下几点

bitset与其它容器不一样,创建对象不需要提供容器变量类型,而是容器的大小,也即二进制位数

如果bitset空间比二进制位数大,则在高位补0,(虽然上面输出是左边为0,但左边是高位,也即其索引分别是15~0)

在将整形常量转换为二进制过后,如果bitset位数不够,则自动放弃原数值高位的二进制位。

将二进制字符串常量转换为二进制过后,如果bitset位数不够,则自动放弃原二进制字符串低有效位(也即右边的位)[这一点与整型常量有点不一样]

在将整数二进制存储到bitset中,整数的低位对应bitset的低位,也即bitset[0]存储的原整数的二进制最低有效位。

bitset的低位为索引较小的位,也即数组下标0开始的位置。整数及字符串二进制低位为右边

位访问方式

访问bitset的某一位

bitset<16> third("1110011");  //将二进制字符串初始化到对象中

cout << third[0] << endl;   //直接通过下标索引得到某一位的值
cout << third.count() << endl;  //统计bitset里面1的位数
cout << third.size() << endl;   //返回bitset总的位数
bool flag = third.test(i);      //测试第i为是否被置为1
flag = third.any();     //测试是否至少有1位被置为1(至少一个1,则返回true,否则返回false)
flag = third.none();    //测试是否没有一个被置为1(都是0,则返回true,否则false)
flag = third.all();   //(C++11)测试是否都是1(都是1,返回ture,否则返回false)


修改某一位

bitset<16> third("1110011");

third.set(i);      //将第i位置为1
third.set();       //将全部置为1
third.reset();     //将全部置为0
third.flip(i);     //将第i反转(取反)
third.flip();      //将bitset全部进行反转


整体转换

bitset<16> first("110010");

cout << first.to_string() << endl;   //以二进制字符串形式输出,将所有二进制位输出
cout <, first.to_ulong() << endl; //转换为unsigned long整数,然后输出


后记

一直不知道STL里面还有这个容器,可以非常方便的实现二进制与十进制的转换,之前进制转换一直是自己来循环除或者累乘,以及通过与运算来进行位操作。下面是一段程序,利用bitset实现十进制到二进制的互相转换。

#include <iostream>
#include <bitset>
#include <string>

using namespace std;

int main()
{
int decNum = 0;
string binStr = "";
string resStr = "";
bitset<32> first;
bitset<32> second;

int a = true;
cout << a << endl;

cout << "Please input the decimal number: ";
cin >> decNum;

cout << "Please input the binary string: ";
cin >> binStr;

first = bitset<32>(decNum);
second = bitset<32>(binStr);

int pos = -1;
for (int i = first.size()-1; i >= 0; i--)
{
if (first[i])
{
pos = i;
break;
}
}
for (int i = pos; i >= 0; i--)
{
//string tmp = (int)first[i] + "";
//resStr += tmp;
first[i] ? resStr += "1" : resStr += "0";
}

cout << "The binary string of the decimal number: " << resStr << endl;
cout << "The decimal number of the binary string:" << second.to_ulong() << endl;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  bitset stl C++