在 C++ 中操作位集
Manipulating bitset in C++
我正在寻找对二进制字符串的一些 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 字符。我的问题是我可以遍历一个位集并同时修改各个位吗?
例如下面我肯定做不到:
#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;
}
您可以使用 set,reset,flip, operator[]
方法轻松操作 std::bitset
的位。参见 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;
}
我正在寻找对二进制字符串的一些 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 字符。我的问题是我可以遍历一个位集并同时修改各个位吗?
例如下面我肯定做不到:
#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;
}
您可以使用 set,reset,flip, operator[]
方法轻松操作 std::bitset
的位。参见 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;
}