【C++ 14】#include
#include <iostream>
#include <bitset> // 包含 bitset 头文件
int main() {
std::bitset<8> b(42); // 创建一个包含 8 位的 bitset 对象,初始化为十进制数 42 的二进制表示
std::cout << b << std::endl; // 输出 bitset 对象的内容,应该是 "00101010"
b.set(2); // 将第 2 位设置为 1(从右往左数,从 0 开始)
std::cout << b << std::endl; // 输出 "00111010"
b.reset(4); // 将第 4 位设置为 0
std::cout << b << std::endl; // 输出 "00101010"
b.flip(1); // 翻转第 1 位的值
std::cout << b << std::endl; // 输出 "00001010",如果原来是 0 则变为 1,原来是 1 则变为 0
unsigned int num = b.to_ulong(); // 将 bitset 对象转换为无符号整数
std::cout << num << std::endl; // 输出转换后的整数,应该是 10(二进制 "00001010" 对应的十进制数)
return 0;
}
bitset<16> bit ( 0xFFFF ) // 0~15位都置1
bitset<32> bit ( 0xFFFF ) // 0~15位置1,16~31位置0
用 string 对象初始化bitset对象
string strval ( “1100” )
bitset<32> bit ( strval )
注意:从string对象读入位集的顺序是从右向左。即反向转化:string对象最右边的字符用来初始化bitset对象的低阶位(即下标为0的位)。
bit 的位模式中第2和3位置为1,其余位置都为0。如果string对象的字符个数小于bitset类型的长度,则高阶位将置为0。
不一定要把整个string对象都作为bitset的初始值,可以只用某个子串作为初始值:
string str ( “111111111100000000011011” )
bitset<32> bit ( str , 5 , 4 )
l bitset的成员函数
any() | 是否存在位置为1的二进制位 |
none() | 不存在置为1的二进制位? |
count() | 置为1的二进制位的个数 |
size() | 总的二进制位的个数 |
[pos] | 访问在pos处的二进制位 |
test(pos) | pos处的二进制位是否为1 |
set() | 所有位都置1 |
set(pos) | pos处的二进制置1 |
reset() | 所有二进制置0 |
reset(pos) | pos处的二进制位置0 |
flip() | 所有位置反 |
flip(pos) | pos位置反 |
to_ulong() | 返回一个 unsigned long 值 |