四、表达式
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、优先级