/* STL 中bitset的使用。 member functions: · bitset::any : 判断bitset里面是否有1; 有,返回true,否则返回false; · bitset::count :计算一个bitset里面有几个1, 通过bitset:size()-bitset:count()可以得到有几个0; · bitset::flip : 取反函数,可以带参数,bitset:flip( pos )表示将第pos位取反,pos从0开始,且表示从bitset右边开始数,可以不带参数,直接bitset:flip()表示将所有位取反; · bitset::none : 判断bitset是否全部为0,若全部为0,返回true,否则,返回false;此函数和bitset::all相反; · bitset::operator[] : 表示[]的使用,即bitset也可以看成一个数组,可以通过bitset[n]来取得第n位的值,或者对其进行赋值; · bitset::reset : 置0函数,可以带参数,bitset:reset( pos )表示将第pos位置为0,pos从右边开始,从0开始,不带参数,表示将所有位置0; · bitset::set : 置1函数,可以带参数,bitset:set( pos, val )表示将第pos位置为val,val可以为1或者0,不带参数,则默认将所有位置为1; · bitset::size :表示取得bitset的长度; · bitset::test : 要带参数,bitset:test( pos )表示测试第pos位是否为1,若为1,返回true,否则返回false;此函数中用到boolalpha, 使用cout<<boolalpha;之后,后面的输出就会用true和false代替默认的1和0; · bitset::to_string : 将bitset转换为string,带参数,有三个参数,具体见函数; · bitset::to_ulong : 将bitset转换为unsigned long; · bitset::to_ullong : 将bitset转换为unsigned long long;(此函数实现省略) · bitset::at : 带参数,bitset:at( pos )表示取得第pos位的值,pos从0开始,从右边开始; · bitset::all : 不带参数,判断bitset是否全部为1,若全部为1,返回true,否则返回false;此函数和bitset::none相反; */ #include <iostream> #include <bitset> using namespace std; void my_bitset_any(); void my_bitset_count(); void my_bitset_flip(); void my_bitset_none(); void my_bitset_operator(); void my_bitset_reset(); void my_bitset_set(); void my_bitset_size(); void my_bitset_test(); void my_bitset_to_string(); void my_bitset_to_ulong(); void my_bitset_at(); void my_bitset_all(); int main() { //my_bitset_any(); //my_bitset_count(); //my_bitset_flip(); //my_bitset_none(); //my_bitset_operator(); //my_bitset_reset(); //my_bitset_set(); //my_bitset_size(); //my_bitset_test(); //my_bitset_to_string(); //my_bitset_to_ulong(); //my_bitset_at(); //my_bitset_all(); system("pause"); return 0; } // bitset::any void my_bitset_any() { bitset<16> mybits; cout << "enter a binary number: "; cin >> mybits; if (mybits.any()) cout << "mybits has " << (int)mybits.count() << " bits set.\n"; else cout << "mybits has no bits set.\n"; } // bitset::count void my_bitset_count() { bitset<8> myset (string("10110011")); cout << "myset has " << int(myset.count()) << " ones "; cout << "and " << int(myset.size()-myset.count()) << " zeros.\n"; } //bitset::flip void my_bitset_flip() { bitset<4> mybits (string("0001")); cout << mybits.flip(2) << endl; // 0101 cout << mybits.flip() << endl; // 1010 } // bitset::none void my_bitset_none() { bitset<16> mybits; cout << "enter a binary number: "; cin >> mybits; if (mybits.none()) cout << "mybits has no bits set.\n"; else cout << "mybits has " << (int)mybits.count() << " bits set.\n"; } // bitset::operator[] void my_bitset_operator() { bitset<4> mybits; mybits[1]=1; // 0010 mybits[2]=mybits[1]; // 0110 cout << "mybits: " << mybits[2] << endl; } // bitset::reset void my_bitset_reset() { bitset<4> mybits (string("1011")); cout << mybits.reset(1) << endl; // 1001 cout << mybits.reset() << endl; // 0000 } // bitset::set void my_bitset_set() { bitset<4> mybits; cout << mybits.set() << endl; // 1111 cout << mybits.set(2,0) << endl; // 1011 cout << mybits.set(2,1) << endl; // 1111 cout << mybits.set(2) << endl; // 1111 } // bitset::size void my_bitset_size() { bitset<8> first; bitset<4> second; cout << "first.size() is " << (int) first.size() << endl; cout << "second.size() is " << (int) second.size() << endl; } // bitset::test void my_bitset_test() { bitset<5> mybits (string("01011")); cout << "mybits contains:\n"; cout << boolalpha; for (size_t i=0; i<mybits.size(); ++i) cout << mybits.test(i) << endl; } // bitset::to_string void my_bitset_to_string() { string mystring; bitset<29> mybits; // mybits: 0000 mybits.set(); // mybits: 1111 mystring=mybits.to_string<char,char_traits<char>,allocator<char> >(); cout << "mystring: " << mystring << endl; } // bitset::to_ulong void my_bitset_to_ulong() { bitset<4> mybits; // mybits: 0000 mybits.set(); // mybits: 1111 cout << mybits << " as an integer is: " << mybits.to_ulong() << endl; } // bitset::at void my_bitset_at() { bitset<5> mybits (string("01011")); // mybits: 0000 cout<<mybits.at(1); } // bitset::all void my_bitset_all() { bitset<5> mybits (string("11111")); cout<<mybits.all(); }