我正在寻找一些对二进制字符串的STL支持。 bitset似乎非常有用,但是我无法成功操纵各个位。
#include <iostream>
#include <bitset>
using namespace std;
int main()
{
string b = bitset<8>(128).to_string();
for(auto &x:b)
{
x = 1 and x-'0' ; cout<<b<<"\n";
}
return 0;
}
那么,我应该使用vector还是bitset可以用来操作各个位?
上述计划给出:
☺0000000
☺ 000000
☺ 00000
☺ 0000
☺ 000
☺ 00
☺ 0
☺
我知道这是因为我正在操作char,当设置为0时会打印相关的ascii字符。我的问题是我可以循环一个bitset并同时修改各个位吗?
例如,我肯定不能在下面做:
#include <iostream>
#include <string>
#include <bitset>
int main ()
{
std::bitset<16> baz (std::string("0101111001"));
std::cout << "baz: " << baz << '\n';
for(auto &x: baz)
{
x = 1&x;
}
std::cout << "baz: " << baz << '\n';
return 0;
}
你可以使用std::bitset
方法轻松操纵set,reset,flip, operator[]
的位。见http://www.cplusplus.com/reference/bitset/bitset/
// bitset::reset
#include <iostream> // std::cout
#include <string> // std::string
#include <bitset> // std::bitset
int main ()
{
std::bitset<4> foo (std::string("1011"));
std::cout << foo.reset(1) << '\n'; // 1001
std::cout << foo.reset() << '\n'; // 0000
return 0;
}