在C ++中操作bitset

时间:2015-06-26 20:59:27

标签: c++ stl bitset

我正在寻找一些对二进制字符串的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;
}

1 个答案:

答案 0 :(得分:4)

您可以使用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;
}