四、表达式
12、bitset 操作
| 操作 | 功能 | 用法 |
| test(pos) | pos位是否为1? | a.test(4) |
| any() | 任意位是否为1? | a.any() |
| none() | 是否没有位为1? | a.none() |
| count() | 值是1的位的个数 | a.count() |
| size() | 位元素的个数 | a.size() |
| [pos] | 访问pos位 | a[4] |
| flip() | 翻转所有的位 | a.flip() |
| flip(pos) | 翻转pos位 | a.flip(4) |
| set() | 将所有位置设置为1 | a.set() |
| set(pos) | 将pos位置设置为1 | a.set(4) |
| reset() | 将所有的位置设置为0 | a.reset() |
| reset(pos) | 将pos位置设置为0 | a.reset(4) |
要使用bitset类,必须先声明头文件:
#include <bitset>
有三种简单方法来构造bitset对象:
bitset<32> bitvec; // 默认构造
bitset<32> bitvec2(0xffff);//低16位设置为1,这边使用了十六进制数表示
bitset<32> bitvec3(012);// 这边用八进制数表示,012在二进制数里为1010,于是在这边把第一位和第三位设置为1
上面的声明,声明了32位的bieset对象,和数组一样,它的下标也要从0开始。
我们还可以通过传递字符串的方式来初始化一个bitset的对象:
string bitval("1010");
bitset<32>bitvec4(bitval);
如果使用的字符串长度比较长,我们还可以截取其中的一段来初始化bitset类型的对象:
string bitval( "1111110101100011010101" );
bitset< 32 > bitvec6( bitval, 6 ,4); // 从位置6开始,长度为4
bitset< 32 > bitvec6( bitval, 6 ,4); // 从位置6开始,直到结束
我们可以把bitset类型转换成其他类型的对象:
string bitval( bitvec3.to_string() ); //转换成字符串
unsigned long bitval = bitvec3.to_ulong();//转换成无符号长型
bitset类也支持位操作符。
13、优先级
本文详细介绍了C++中bitset类的使用方法,包括构造函数(默认、十六进制、八进制字符串),位操作(test,any,none,count,size,flip,set,reset),以及如何通过字符串初始化和转换为其他数据类型。同时提到了位运算符的优先级。
33万+

被折叠的 条评论
为什么被折叠?



