整数到二进制存储在数组中
Integer to binary stored in an array
TL:DR 我有一个 10 位整数,想把它作为二进制数存储在数组中。
假设我有一个 0-1023 的整数,我希望将该数字转换为 10 位二进制数,然后将其放入一个布尔数组中。这是我目前所做的。
void toBinary(bool *binary)
{
string binaryStr = bitset<10>(myValue).to_string(); //to binary
for (int i = 0; i < 10; i++) binary[i] = binaryStr[i] - '0';
}
还有比这更好的方法吗?我将用它做一些视频处理,我会 运行 它在 Pi 上,所以我需要我的程序尽可能轻便和快速。
我不明白你为什么要把位集转换成字符串。直接访问它的元素即可。
bitset<10> myBitset(myValue);
for (int i = 0; i < 10; i++)
binary[i] = myBitset[i];
您也可以进行位移,这是执行此操作的最低级方法:
int mask = 1; // binary 10000000 00000000 ...
for (int i = 0, l = NUM_BITS; i < l; ++i) {
// binary & operation does
// AND logic operation for all corresponging bit
// so 0010&0011=0010
binary[i] = myValue & mask;
// move the bits in mask one to the right
mask = mask>>1;
}
如果你要使用 bitset,我建议你保留 bitset 而不是使用 bool*
因为在 bitsets 中,每个位实际上占用一位,而 bool
是八位至少大。
最后,这是我为此制作的一些测试代码,您可以用它来做基准测试:
#include <iostream>
#include <bitset>
#define NUM_BITS 10
int main(int argc, char *argv[])
{
const int numBits = NUM_BITS;
bool binary[numBits];
const int myValue = 1;
std::bitset<NUM_BITS> myBitset(myValue);
//for (int i = 0; i < NUM_BITS; i++)
//binary[i] = myBitset[i];
for (int i = 0, l = NUM_BITS; i < l; ++i) {
std::cout<< (binary[i]?'1':'0')<<" ";
}
std::cout<<"\n";
int mask = 1; // binary 10000000 00000000 ...
for (int i = 0, l = NUM_BITS; i < l; ++i) {
// binary & operation does
// AND logic operation for all corresponging bit
// so 0010&0011=0010
binary[i] = myValue & mask;
// move the bits in mask one to the right
mask = mask>>1;
}
for (int i = 0, l = NUM_BITS; i < l; ++i) {
std::cout<< (binary[i]?'1':'0')<<" ";
}
}
TL:DR 我有一个 10 位整数,想把它作为二进制数存储在数组中。
假设我有一个 0-1023 的整数,我希望将该数字转换为 10 位二进制数,然后将其放入一个布尔数组中。这是我目前所做的。
void toBinary(bool *binary)
{
string binaryStr = bitset<10>(myValue).to_string(); //to binary
for (int i = 0; i < 10; i++) binary[i] = binaryStr[i] - '0';
}
还有比这更好的方法吗?我将用它做一些视频处理,我会 运行 它在 Pi 上,所以我需要我的程序尽可能轻便和快速。
我不明白你为什么要把位集转换成字符串。直接访问它的元素即可。
bitset<10> myBitset(myValue);
for (int i = 0; i < 10; i++)
binary[i] = myBitset[i];
您也可以进行位移,这是执行此操作的最低级方法:
int mask = 1; // binary 10000000 00000000 ...
for (int i = 0, l = NUM_BITS; i < l; ++i) {
// binary & operation does
// AND logic operation for all corresponging bit
// so 0010&0011=0010
binary[i] = myValue & mask;
// move the bits in mask one to the right
mask = mask>>1;
}
如果你要使用 bitset,我建议你保留 bitset 而不是使用 bool*
因为在 bitsets 中,每个位实际上占用一位,而 bool
是八位至少大。
最后,这是我为此制作的一些测试代码,您可以用它来做基准测试:
#include <iostream>
#include <bitset>
#define NUM_BITS 10
int main(int argc, char *argv[])
{
const int numBits = NUM_BITS;
bool binary[numBits];
const int myValue = 1;
std::bitset<NUM_BITS> myBitset(myValue);
//for (int i = 0; i < NUM_BITS; i++)
//binary[i] = myBitset[i];
for (int i = 0, l = NUM_BITS; i < l; ++i) {
std::cout<< (binary[i]?'1':'0')<<" ";
}
std::cout<<"\n";
int mask = 1; // binary 10000000 00000000 ...
for (int i = 0, l = NUM_BITS; i < l; ++i) {
// binary & operation does
// AND logic operation for all corresponging bit
// so 0010&0011=0010
binary[i] = myValue & mask;
// move the bits in mask one to the right
mask = mask>>1;
}
for (int i = 0, l = NUM_BITS; i < l; ++i) {
std::cout<< (binary[i]?'1':'0')<<" ";
}
}