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; }
相关文章推荐
- C++ 标准模板库STL set 使用方法与应用介绍(二)
- C++ 标准模板库STL 双端队列 deque 使用方法与应用介绍(一)
- C++ STL unordered_map介绍与使用方法
- C++ 标准模板库STL 优先级队列 priority_queue 使用方法与应用介绍(一)
- C++ 标准模板库STL 队列 queue 使用方法与应用介绍(一)
- C++ 标准模板库STL 双向链表 list 使用方法与应用介绍(一)
- C++ 标准模板库STL 队列 queue 使用方法与应用介绍(一)
- C++STL map介绍与使用方法
- C++ 标准模板库STL set 使用方法与应用介绍(一)
- C++ 标准模板库STL 双向链表 list 使用方法与应用介绍(一)
- C++ 标准模板库STL multimap 使用方法与应用介绍
- 元素类型C++ 标准模板库STL 队列 queue 使用方法与应用介绍(一)
- C++ 标准模板库STL multimap 使用方法与应用介绍(一)
- C++ STL vector, valarray, 和bitSet使用方法对比
- 详细介绍C/C++时间函数使用方法
- c++中的消息框messagebox()详细介绍及使用方法
- C++ STL MAP 使用方法与应用介绍(二)
- C++ STL MAP 使用方法与应用介绍(四)
- 详细介绍C/C++时间函数使用方法
- C++ :stringstream介绍,使用方法与例子(转)