/*
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();
}