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

《C++ Primer》笔记-处理0,1字符操作标准库 bitset

2012-12-27 17:48 239 查看
原来C++中还有专门处理0,1操作的库类 bitset(从字面上解释,比特集合,集合貌似不贴切。)
1.bitset 是处理二进制位的有序集 ,每个位读只能是0或1.
#include <bitset>
using std::bitset;
2.bitset 对象的定义和初始化
bitset<32> bitvec; // 32 bits, all zero
在 32 位 unsigned long 的机器上,十六进制值 0xffff 表示为二进制位 就是十六个 1 和十六个 0(每个 0xf 可表示为 1111)。可以用 0xffff 初始 化 bitset 对象
// bitvec1 is smaller than the initializerbitset<16> bitvec1(0xffff); // bits 0 ... 15 are set to 1// bitvec2 same size as initializerbitset<32> bitvec2(0xffff); // bits 0 ... 15 are set to 1;16 ... 31 are 0// on a 32-bit machine, bits 0 to 31 initialized from 0xffffbitset<128> bitvec3(0xffff); // bits 32 through 127 initialized to zero用 string 对象初始化 bitset 对象当用 string 对象初始化 bitset 对象时,string 对象直接表示为位模式。从 string 对象读入位集的顺序是从右向左(from right to left):
string strval("1100");
bitset<32> bitvec4(strval);

bitvec4 的位模式中第 2 和 3 的位置为 1,其余位置都为 0。如果 string 对 象的字符个数小于 bitset 类型的长度,则高阶位置为 0。当用 string 对象初始化 bitset 对象时,记住这一差别很重要。不一定要把整个 string 对象都作为 bitset 对象的初始值。相反,可以只 用某个子串作为初始值:string str("1111111000000011001101");bitset<32> bitvec5(str, 5, 4); // 4 bits starting at str[5], 1100bitset<32> bitvec6(str, str.size() - 4); // use last 4 characters
表 3.7. bitset 操作
b.any()b 中是否存在置为 1 的二进制位?
b.none()b 中不存在置为 1 的二进制位吗?
b.count()b 中置为 1 的二进制位的个数
b.size()b 中二进制位的个数
b[pos]访问 b 中在 pos 处二进制位
b.test(pos)b 中在 pos 处的二进制位置为 1 么?
b.set()
把 b 中所有二进制位都置为 1
b.set(pos)
把 b 中在 pos 处的二进制位置为 1
表 3.7. bitset 操作
b.any()b 中是否存在置为 1 的二进制位?
b.reset()把 b 中所有二进制位都置为 0
b.reset(pos)
把 b 中在 pos 处的二进制位置为 0
b.flip()把 b 中所有二进制位逐位取反
b.flip(pos)把 b 中在 pos 处的二进制位取反
b.to_ulong()
用 b 中同样的二进制位返回一个 unsigned long 值
os << b把 b 中的位集输出到 os 流

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