注意:这个只能识别整数部分,小数部分不能用。
一个二进制串,比如0110101,第 0 位是最右边的一位,是1,第 6 位是最左边一位,是0.
定义及初始化:
bitset<8> b1; //默认构造函数,一定要设置位数,此次设为8位. [0 0 0 0 0 0 0 0]
bitset<8> b2(42); //赋值 b2 为7. [0 0 1 0 1 0 1 0]
string bit_string = "110010";
bitset<8> b3(bit_string); //[0 0 1 1 0 0 1 0]
函数:
bitset<N>& set(); 设置所有位为1
bitset<N>& set(size_t pos,bool value=true); 设置某个位置的值为1
bitset<N>& reset(); 设置所有位为0
bitset<N>& reset(size_t pos,bool value=true); 设置某个位置的值为0
bitset<N>& flip(); 翻转所有位,1变0,0变1
bitset<N>& flip(size_t pos); 翻转某一位
bool test( size_t pos ) cosnt; 如果pos位置值为1,返回true,否则false
examp:求一个二进制的最低位(最右边)的 1 在哪个位置
#include <iostream> #include <bitset> int main() { std::bitset<10> b1("1111010000"); size_t idx = 0; while (idx < b1.size() && !b1.test(idx)) { ++idx; } if (idx < b1.size()) { std::cout << "lowest set bit at index " << idx << '\n'; } else { std::cout << "no set bits\n"; } }
bool all() const; 如果所有位的值都为1,返回true,否则false
bool any() const; 如果有一位值为1,返回true,否则false
bool none() const; 如果所有位值都不为1,返回true,否则false
size_t count() const; 返回二进制中1的个数
size_t size() const; 返回二进制的位数
to_string(CharT zero = CharT('0'), CharT one = CharT('1')) const;
用法示例:
#include <iostream> #include <bitset> int main() { std::bitset<8> b(42); std::cout << b.to_string() << '\n' << b.to_string('*') << '\n' << b.to_string('O', 'X') << '\n'; } /* Output: 00101010 **1*1*1* OOXOXOXO */
究竟是我抛弃了历史,还是历史遗弃了我。