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中01
	os<< b 将b中二进制位打印为01,打印到流os
	is>>b 直接在输入流中读取b,遇到第一个不是01的数或者文件结尾或已经读到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()