刘加加在成长(C++语言学习中)

学习、工作、生活,这是三个问题。

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  38 随笔 :: 0 文章 :: 24 评论 :: 0 Trackbacks
有些程序要处理二进制有序集,每个位可能包含0值或者1值。位是保存一组项或条件yes/no信息的简洁方法。标准库提供的bitset类简化了位集的处理。使用bitset 类型,必须包含头文件:#include<bitset>

bitset对象的定义和初始化

bitset<n> b;               b有n位,每位都是0;
bitset<n> b(u);           b是unsigned long型u的副本;
bitset<n> b(s);            b是string对象s中含有的位串的副本;
bitset<n> b(s,pos,n);   b是s中从位置pos开始的n个位的副本;

示例:
    bitset<16> bitvec1(0xffff);         //bitvec1的0-15位都是1
    bitset<32> bitvec2(0xffff);         //bitvec2的0-15为是1,16-31是0
    bitset<128> bitvec3(0xffff);      //bitvec3的0-15位是1,16-127都是0
    
    string str("1100");
    bitset<32> bitvec4(str);            //bitvec4的第2、第3位是1,其余都是0。因为string对象和bitset对象之间是反向转化的:string对象的最右边字符(即下标最大的那个字符)用来初始化bitset对象的低价位(即小标为0的位)

bitset对象的操作:

b.any()         b中是否存在置为1的二进制位?
b.none()       b中不存在置为1的二进制位吗?
b.count()      b中值为1的二进制位的个数
b.size()         b中二进制位的个数
b[pos]          访问b中在pos处的二进制位
b.test(pos)    b中在pos处的二进制位是否为1?
b.set()           把b中所有的二进制位都置为1
b.set(pos)      把b中在pos处的二进制位置为1
b.reset()        把b中所有的二进制位都置为0
b.reset(pos)    把b中在pos处的二进制位置为0
b.flip()            把b中所有二进制位逐位取反
b.flip(pos)      把b中在pos处的二进制位取反
b.to_ulong()   用b中同样的二进制位返回一个unsigned long值
os<<b            吧b中的位集输出到os流
posted on 2008-06-06 23:04 刘加加 阅读(606) 评论(0)  编辑 收藏 引用 所属分类: 学习C++语言

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理