c++bitset详解

目录

前言

1.声明一个该类型变量

2.相关函数

3.用法


前言

通常我们是使用的数据类型都是以字节为单位的,bitset中的一个元素一般只占1 bit,相当于一个char元素所占空间的八分之一,int的三十二分之一,特定的情况可以节约大量内存空间,另外完美支持了各种运算操作。下面,就让我们来仔细研究有关bitset的相关知识吧!

1.声明一个该类型变量

首先是头文件问题,bitset有一个专属的头文件:

#include<bitset>

当然也可以用万能头文件#include<bits/stdc++.h>哈。


接下来就是声明问题了。

通常采用这种声明方式(n为bitset在内存中占的位数):

bitset<n>bt;

这种方法默认初始值为0。 


最后是赋值问题 。

bitset的赋值可谓是五花八门,在这里,给大家列举2种常见的赋值方式:

1.这是二进制赋值方式,由系统将n转为二进制后赋值进bitset中。

bitset<n>bt(1234);

 2.这是字符串赋值方式,由系统直接将字符串赋值进bitset中。

bitset<n>bt(string("字符串"));

 当然还有十六进制赋值等一系列其他方法,在这里就不展示了。

2.相关函数

bt.any()

b中是否存在置为1的二进制位?

bt.none()

b中不存在置为1的二进制位吗?

bt.count()

b中置为1的二进制位的个数

bt.size()

b中二进制位的个数

bt[pos]

访问b中在pos处的二进制位

bt.test(pos)

b中在pos处的二进制位是否为1?

bt.set()

把b中所有二进制位都置为1

bt.set(pos)

把b中在pos处的二进制位置为1

bt.reset()

把b中所有二进制位都置为0

bt.reset(pos)

把b中在pos处的二进制位置为0

bt.flip()

把b中所有二进制位逐位取反

bt.flip(pos)

把b中在pos处的二进制位取反

bt.to_ulong()

用b中同样的二进制位返回一个unsigned long值

os << bt

把b中的位集输出到os流

3.用法

bitset的用法其实很简单,位运算也和正常的一样。

bitset<4>bt1(string("1001"));
bitset<4>bt2(string("0011"));
cout<<(bt1^=bt2)<<endl;       // 1010 (bt1对bt2按位异或后赋值给bt1)
cout<<(bt1&=bt2)<<endl;       // 0010 (按位与后赋值给bt1)
cout<<(bt1|=bt2)<<endl;       // 0011 (按位或后赋值给bt1)
cout<<(bt1<<=2)<<endl;        // 1100 (左移2位,低位补0,有自身赋值)
cout<<(bt1>>=1)<<endl;        // 0110 (右移1位,高位补0,有自身赋值)
cout<<(~bt2)<<endl;           // 1100 (按位取反)
cout<<(bt2>>1)<<endl;         // 0001 (右移,不赋值)
cout<<(bt1==bt2)<<endl;       // (0)false (0110==0011为false)
cout<<(bt1!=bt2)<<endl;       // (1)true  (0110!=0011为true)
cout<<(bt1&bt2)<<endl;        // 0010 (按位与,不赋值)
cout<<(bt1|bt2)<<endl;        // 0111 (按位或,不赋值)
cout<<(bt1^bt2)<<endl;		  // 0101 (按位异或,不赋值)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪子小院

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值