整数到布尔数组的二进制表达式

时间:2015-01-07 15:27:13

标签: c++ binary boolean

给定一个整数,我想得到它的二进制表达式,并将其保存在一个布尔数组中。

例如,

bool b[32];
int a=98; // a=0b1100010

我希望有办法让b变成010001100000000000000000或类似的东西。

我对bitset知之甚少,但我不知道如何将bitset转换为布尔数组(除了使用for循环)。

我认为它是以1或0的顺序存储在计算机中,应该有某种方式我们可以将序列输出,但我不知道该怎么做。

谢谢。

1 个答案:

答案 0 :(得分:0)

我认为你与bitset一起走在正确的轨道上。

要构建一个大小为32的bitset,其中包含98,您可以这样做:

bitset<32> foo(98);

你也可以通过这样做来构造所以插入最重要的位:

bitset<32> foo(98 << 24);
cout << foo.to_string() << endl; // Prints: 01100010000000000000000000000000

就将bitset转换为数组而言,您无需使用operator[]上的bitset。另外,你得到:

  • all
  • any
  • count
  • flip
  • none
  • reset
  • set
  • to_string
  • to_ulong
  • to_ullong

加上整数支持的所有逻辑运算符。

修改

好的,假设您有100 int个想要放入bitset<sizeof(int)>的{​​{1}}中:vector<int> bar;让我们也说一点,例如你只想反转奇数int秒。这就是我要做的事情:

vector<bitset<sizeof(int) * 8>> foo(bar.size()); // Creating as many empty bitsets as there are ints in bar

for (int i = 0; i < bar.size(); ++i){
    foo[i] = bar[i]; // Initializing each element of foo

    if (foo[i][0].test()){ // Is this number odd
        for (int j = 0; j < foo[i].size() / 2; ++j){ // This loop reverses the elements in a bitset
            const bool swap = foo[i][j];

            foo[i][j] = foo[i][foo[i].size() - j - 1];
            foo[i][foo[i].size() - j - 1] = swap;
        }
    }
    cout << i << ". " << foo[i] << endl; // This is for testing purposes it'll print the contents of the indexed bitset in foo
}