std::bitset 讲解
介绍
std::bitset
是 C++ 提供的一种 n-bit
固定大小序列的模版,可以用于标准逻辑运算,并且可以与字符串和整数相互转换,还可以使用标准流输出。
1 |
|
模版形参
N
:要为bitset
分配储存的 bit 位数
头文件:<bitset>
构造方法
1 |
|
成员方法
支持下标
operator[]
1
2
3std::bitset<10> num = (std::bitset<10>)"111011";
std::cout << num[2] << std::endl; // 0
// 从低位开始bitset
支持所有常规位运算操作1
2
3
4
5
6
7
8
9
10
11
12std::bitset<10> num = 0xf;
std::cout << (num & (std::bitset<10>)0x12) << std::endl; // 0000000010
std::cout << (num | (std::bitset<10>)0x12) << std::endl; // 0000011111
std::cout << (num ^ (std::bitset<10>)0x12) << std::endl; // 0000011101
std::cout << (num << 2) << std::endl; // 0000111100
std::cout << (num >> 2) << std::endl; // 0000000011
num = -1;
std::cout << num << std::endl; // 1111111111
std::cout << (num >> 2) << std::endl; // 0011111111
// 对 bitset 的右移都是逻辑右移set()
:设置单独位的值1
2
3std::bitset<10> num = -1;
num.set(0, false); // 将下标为 0 的位设置为 0
std::cout << num << std::endl; // 1111111110flip()
:取反,无参数时默认对全部位1
2
3
4
5std::bitset<10> num = 0xf;
num.flip();
std::cout << num << std::endl; // 1111110000
num.flip(1);
std::cout << num << std::endl; // 1111110010检查位
all()
:判断是否所有位都为 1any()
:判断是否有任意一位为 1none()
:判断是否所有位为 0
1
2
3
4
5std::bitset<4> num = 0x7;
std::cout << num.all() << std::endl; // 0
std::cout << num.any() << std::endl; // 1
std::cout << num.none() << std::endl; // 0count()
:返回 1 的数量1
2
3std::bitset<4> num = 0x7;
std::cout << num.count() << std::endl; // 3size()
:返回位数1
2std::bitset<10> num;
std::cout << num.size() << std::endl; // 10转换:
to_string()
:返回数据的字符串类型to_ulong
:返回数据的unsigned long
整数表示to_ullong
:返回数据的unsigned long long
整数表示
1
2
3
4
5
6
7
8std::bitset<8> num_bit = 0xf;
unsigned long num_1 = num_bit.to_ulong();
unsigned long long num_2 = num_bit.to_ullong();
std::string str = num_bit.to_string();
std::cout << num_1 << std::endl; // 15
std::cout << num_2 << std::endl; // 15
std::cout << str << std::endl; // 00001111