给定一个整数,我想得到它的二进制表达式,并将其保存在一个布尔数组中。
例如,
bool b[32];
int a=98; // a=0b1100010
我希望有办法让b变成010001100000000000000000或类似的东西。
我对bitset知之甚少,但我不知道如何将bitset转换为布尔数组(除了使用for循环)。
我认为它是以1或0的顺序存储在计算机中,应该有某种方式我们可以将序列输出,但我不知道该怎么做。
谢谢。
答案 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
}