0

我有一个int数组:int temp[56],每个元素等于'1'或'0'。使用这样的代码将这个 int 数组转换为一个 7bytes 变量是真的吗?

int temp[56]={...};
int a=0;
int b=0;

for (int i=0; i<56; i++)
{
b=temp[i];
a|=(b<<i);  
4

2 回答 2

5

如果你有 56 ints 总是只有0or的值1,那么你真的有 56 bools 在超大包中。您可以通过以下方式解决此问题:

1)使用布尔数组

bool arr[56];

2) 使用std::vector<bool>

std::vector<bool> arr;

3) 使用std::bitset<SIZE>

std::bitset<56> arr;

4)如果你绝对必须(出于某种原因),将它们打包成一个整数(假设是一个 32 位整数):

unsigned int arr[2]; // 2*32 = 64, so we have enough space for all 56 flags
// to set the i'th bit
arr[i / 32] |= 1U << (i % 32);
// or to clear the i'th bit
arr[i / 32] &= ~(1U << (i % 32));

应该首选前 3 个选项之一。

于 2013-09-30T19:02:27.973 回答
0

C 解决方案:接近 OP 的建议,但用于int64_t确保位移工作并且对于结果来说足够大。可以long long改用。

int temp[56]={...};  // temp filled with 0 or 1.
int64_t a=0;

for (int i=0; i<56; i++) {
  a |= ((int64_t) temp[i]) << i;
}
于 2013-09-30T19:27:49.160 回答