代码改变世界

C++Primer阅读笔记-第3章-标准库类型 bitset类型

2012-11-18 16:50  kennyMc  阅读(278)  评论(0)    收藏  举报

C++Primer阅读笔记-第3章-标准库类型 bitset类型

bitset类型是用来处理位集的,属于标准库。
bitset位置编号是从0开始的,假如bitset是32位的,那么从0到31就是从低阶位到高阶位,类似于寄存
器。

1.用unsigned值初始化bitset对象

#include<iostream>
#include<bitset>
using std::cout;
using std::endl;
using std::cin;
using std::bitset;

int main()
{
    //这里6的2进制是00000000 00000110,从高位到低位
    //假如i被存储到AX寄存器里,那么AH里就是00000000,AL里是00000110
    unsigned int i=6; 
    bitset<16> bit(i);
    for(int i=0;i<bit.size();i++)
    {
       cout<<bit[i];
    }
    //输出0110000000000000,因为bitset中索引0是指向最低位的 
    system("pause");
    return 0;
}

2.用string对象初始化bitset对象
字符串这里只能用二进制格式的字符串来初始化bitset,否则报错

#include <iostream>
#include <bitset>
using std::cin;
using std::cout;
using std::endl;
using std::bitset;

int main()
{
    bitset<16> bit("1010");
    for(int i=0;i<bit.size();i++)
    {
        cout<<bit[i];
    }
        //输出0101000000000000
    system("PAUSE");
    return 0;
}

把string对象的某个字符串作为初始值

#include <iostream>
#include <string>
#include <bitset>
using std::cin;
using std::cout;
using std::endl;
using std::bitset;
using std::string;

int main()
{
    string str("101001");
    //这里从str的下标2开始,截取4个字符作为初始值
    bitset<16> bit(str,2,4);
    for(int i=0;i<bit.size();i++)
    {
        cout<<bit[i];
    }
    //输出1001000000000000
    system("PAUSE");
    return 0;
}

3.bitset对象上的操作

#include <iostream>
#include <string>
#include <bitset>
using std::cin;
using std::cout;
using std::endl;
using std::bitset;
using std::string;

int main()
{
    string str("101001");
    bitset<16> bit(str);
    cout<<"是否存在为1的二进制位:"<<bit.any()<<endl;
    cout<<"不存在为1的二进制位:"<<bit.none()<<endl;
    cout<<"bitset中1的个数:"<<bit.count()<<endl;
    cout<<"bitset在下标2处是否为1:"<<bit.test(0)<<endl;
    //其他的一些常用操作
    //bit.set() 把bit中所有二进制位都设置为1
    //bit.set(pos) 把bit中pos处的二进制位都设置为1
    //bit.reset() 把bit中所有二进制位都设置为0
    //bit.reset(pos) 把bit中pos处的二进制位都设置为0
    //bit.flip() 把bit中所有二进制位取反
        //bit.flip(pos) 把bit中pos处的二进制位取反
    //bit.to_ulong 返回一个unsigned long值
    system("PAUSE");
    return 0;
}