17.9 (a)bitvec为64位,第5位为1,其余为0;(b)bv为32位,低位为1010101,其余为0;(c)bv为8位,用bstr对其初始化,如果读入字符串包含0,1以外的字符,则会出错。
17.10
#include <iostream>
#include <bitset>
using namespace std;
int main()
{
bitset<32> b;
b.set(1);
b.set(2);
b.set(3);
b.set(5);
b.set(8);
b.set(13);
b.set(21);
cout << b << endl;
bitset<32> b2;
cout << b2 << endl;
return 0;
}
17.11 记录10个问题的答案,用整数可以满足要求;如果是100个问题,应该用bitset。
17.12
#include <iostream>
#include <bitset>
using namespace std;
template <size_t N>
class test {
public:
test(): b() { }
void set_result(size_t pos, bool v) { b.set(pos, v); }
bitset<N> get_result() const { return b; }
size_t score(const bitset<N>&);
private:
bitset<N> b;
};
template <size_t N>
size_t test<N>::score(const bitset<N> &r)
{
size_t ret = 0;
for(auto i = 0; i < N; ++i) {
if (b[i] == r[i])
ret++;
}
return ret;
}
int main()
{
test<16> t1;
t1.set_result(5, 1);
t1.set_result(13, 1);
auto r = t1.get_result();
cout << r << endl;
bitset<16> t2;
cout << "t2 score: " << t1.score(t2) << endl;
return 0;
}
17.13 上题代码的score成员可以实现计分。