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

binary expression of integer to boolean array

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

例如,

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

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

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

我以为 98 是作为 1 或 0 的序列存储在计算机中的,应该有某种方法可以将这个序列取出来,但我不知道该怎么做。

谢谢。

我认为您 bitset 的方向是正确的。

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

bitset<32> foo(98);

您还可以通过执行以下操作将其插入到最高有效位中:

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

至于将 bitset 转换为数组,您无需在 bitset 上使用 operator[]。另外你得到:

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

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

编辑:

好的,假设您有 100 个 int 想要放入 bitset<sizeof(int)> 中: vector<int> bar; 举个例子,您只想反转奇数 ints。这是我会做的:

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
}