17.2 The bitset Type(bitset类型)
包含在bitset头文件中
bitset类是-一个类模板,它类似array类,具有固定的大小。
包含编号从0到31的32个二进制位。编号从0开始的二进制位被称为低位,编号到31结束的二进制位被称为高位。
#include <iostream> #include <bitset> #include <string> using namespace std; int main() { bitset<13> b(666);//总共13位二进制表示666 cout << b << endl; system("PAUSE"); return 0; }
当我们使用一个整型值来初始化bitset时,此值将被转换为unsigned long long类型并被当作位模式来处理。bitset中的二进制位将是此模式的一个副本。如果bitset的大小大于一个unsigned long long中的二进制位数,则剩余的高位被置为0。如果bitset的大小小于一个unsigned long long中的二进制位数,则只使用给定值中的低位,超出bitset大小的高位被丢弃:
当我们使用字符串表示数时,字符串中下标最小的字符对应高位,反之亦然。
#include <iostream> #include <bitset> #include <string> using namespace std; int main() { bitset<13> b("110111"); cout << b << endl; system("PAUSE"); return 0; }
bitset操作

to ulong和to ullong操作都返回一个值,保存了与bitset对象相同的位模式。
如果bitset中的值不能放入给定类型中,则这两个操作会抛出一个overflow_error异常。
运用
#include <iostream> #include <bitset> using namespace std; template <size_t N> class exam { public: exam():b(){} size_t get_num() { return N; } void set_solution(size_t n, bool a) { b.set(n, a); } bitset<N> get_solution() { return b; } size_t get_score(bitset<N>& c); private: bitset<N> b; }; template <size_t N> size_t exam<N>::get_score(bitset<N>& c) { size_t ret = 0; for (int i = 0; i < N; ++i) { if (b[i] != c[i]) ret++; } return ret; } int main() { exam<50> s; bitset<50> f; s.set_solution(1, 1); s.set_solution(45, 1); cout << s.get_solution() << endl; cout << s.get_num() << "道题,对了" << s.get_score(f) << "道" << endl; system("PAUSE"); return 0; }

浙公网安备 33010602011771号