C++ primer 17.2
bitset类型, 标准库类型
1 使得位运算更容易实现, 并且能够处理超过最长整型大小的位集合.
bitset定义在bitset中
定义和初始化bitset
1 bitset<n> b; b有n位,每一位均为0,从零开始
2 bitset<n>b(u); b是一个unsigned long long 值u的低n位的拷贝.
如果n大于unsigned long long 的大小, 高位置为零
3 bitset<n> b(s,pos,m,zero,one) b是string s从位置pos开始m个字符的拷贝.
s只能包含zero和one; 如果包含其他字符, 构造函数会抛出异常.
m默认为string::npos(即字符串结束),zero默认为'0',one默认为'1';
4 bitset<n> b(cp,pos,m,zero.one) cp指的是c语言风格字符串
bitset 操作
置位 ,即置为1,复位 置位0
b.any() b中是否存在置位的二进制位
b.all() b的所有位都置位了吗
b.none() b中不存在置位的二进制位了吗
b.count() b中置位的位数
b.size() 返回b的位数
b.test(pos) 若pos位置是置位的,返回true,否则返回false
b.set(pos,v) 将pos位置位v,v默认为1
b.set() 将b中所有位置位
b.reset(pos) 将pos为复位
b.reset() 将b中所有位复位
b.flip(pos) 改变pos为的状态
b.flip() 将b中所有位反转
b[pos] (类似数组) 方位b中pos为处的位
b.to_ulong() 返回unsigned long 的值
b.to_ulonglong() 若b中位数较大, 则抛出异常
b.to_string(zero,one)返回一个string,表示b中的位模式. zero和one的默认值为0,1 用来表示b中0或1
os<< b 将b中二进制位打印为0或1,打印到流os
is>>b 直接在输入流中读取b,遇到第一个不是0或1的数或者文件结尾或已经读到b.size()停止
简单应用
9 2015 广东工业大学新生赛 E GDUT 的实验室
十进制与二进制的比较
[题意]
给你二进制 IP 编码和十进制 IP 编码,让你判断两者是否一致。
[分析]
c++的读入——
默认数据按十进制输入输出。如果要求按八进制或十六进制输入输出,在 cin 或 cout 中必须
指明相应的数据形式。
oct 为八进制,hex 为十六进制,dec 为十进制。即 cin>>oct(hex)>>x
c 的读入——
%o 读入八进制数
%x 读入十六进制数
bitset 的读入——
for (int i = 0; i<4; ++i)cin >> b[i], cin.get();
bitset 读入之后,
for (int i = 0; i<4; ++i)if (a[i] != b[i].to_ulong())return FALSE;
bitset.to_string()
bitset.to_ulong()
bitset.to_ullong()