[关闭]
@guxier 2022-03-30T06:03:01.000000Z 字数 1072 阅读 339

bitset

分享


常见数据类型的占位

编译器可以根据自身硬件来选择合适的大小,但是需要满足约束:short和int型至少为16位,long型至少为32位,并且short型长度不能超过int型,而int型不能超过long型。这即是说各个类型的变量长度是由编译器来决定的。
然而32位计算机和64位计算机中int型都是4个字节。

1字节(byte) = 8位(bit)

类型 占位(字节) 占位(位)
char 1 8
int 4 32
int 4 32
long long 8 64
float 4 32
double 8 64

Bitset

参考原文
bitset:简称位集,在头文件<bitset>下,是一种位集合的数据结构,(只有两个可能值的元素:0 或 1,true 或 false,…),每个元素仅占用一位,因此可以大大节省空间。
它类似与数组,。Bitsets可以使用许多二元操作符,(| &···)。

定义Constructors

  1. bitset<len> s1;
  2. bitset<len> s2(0xfa2);
  3. bitset<len> bs3(string("0101111001"));

位运算操作符:

~s: 返回对s每一位取反后的结果;
&,|,^:返回对两个位数相同的bitset执行按位与、或、异或运算的结果;
<<, >>:返回把一个bitset左移,右移若干位的结果.(补零);
==,!=:比较两个位数相同的bitset代表的二进制数是否相等;

[ ]操作符:

s[k] :表示s的第k位,即可取值也可赋值,编号从0开始;
类似于数组。

count / size

  1. s.count(); \\返回二进制串中有多少个1
  2. s.size(); \\返回可以容纳的位的个数

any / none

若s所有位都为0,则s.any()返回false,s.none()返回true;
若s至少有一位为1,则s.any()返回true,s.none()返回false;

  1. s.any();
  2. s.none();

set / rest / flip

  1. s.set(); //把s所有位变为1;
  2. s.set(k,v); //把s的第k位改为v,即s[k]=v;
  3. s.reset(); //把s的所有位变为0.
  4. s.reset(k); //把s的第k位改为0,即s[k]=0;
  5. s.flip(); //把s所有位取反.即s=~s;
  6. s.flip(k); //把s的第k位取反,即s[k]^=1;

to_string / to_ulong

  1. to_string(); // 返回bitset的字符串表示
  2. to_ulong(); // 返回bitset的整数表示

test

  1. bool test( size_t pos ); // 返回bitset在pos位上的值
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注