@guxier
2022-03-30T06:03:01.000000Z
字数 1072
阅读 339
分享
编译器可以根据自身硬件来选择合适的大小,但是需要满足约束: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>下,是一种位集合的数据结构,(只有两个可能值的元素:0 或 1,true 或 false,…),每个元素仅占用一位,因此可以大大节省空间。
它类似与数组,。Bitsets可以使用许多二元操作符,(| &···)。
bitset<len> s1;bitset<len> s2(0xfa2);bitset<len> bs3(string("0101111001"));
~s: 返回对s每一位取反后的结果;
&,|,^:返回对两个位数相同的bitset执行按位与、或、异或运算的结果;
<<, >>:返回把一个bitset左移,右移若干位的结果.(补零);
==,!=:比较两个位数相同的bitset代表的二进制数是否相等;
s[k] :表示s的第k位,即可取值也可赋值,编号从0开始;
类似于数组。
s.count(); \\返回二进制串中有多少个1s.size(); \\返回可以容纳的位的个数
若s所有位都为0,则s.any()返回false,s.none()返回true;
若s至少有一位为1,则s.any()返回true,s.none()返回false;
s.any();s.none();
s.set(); //把s所有位变为1;s.set(k,v); //把s的第k位改为v,即s[k]=v;s.reset(); //把s的所有位变为0.s.reset(k); //把s的第k位改为0,即s[k]=0;s.flip(); //把s所有位取反.即s=~s;s.flip(k); //把s的第k位取反,即s[k]^=1;
to_string(); // 返回bitset的字符串表示to_ulong(); // 返回bitset的整数表示
bool test( size_t pos ); // 返回bitset在pos位上的值