整数到布尔数组的二进制表达式
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;
举个例子,您只想反转奇数 int
s。这是我会做的:
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
}
给定一个整数,我想得到它的二进制表达式,并将其保存在一个布尔数组中。
例如,
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;
举个例子,您只想反转奇数 int
s。这是我会做的:
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
}