0

私はintの配列を持っています:int temp [56]、各要素は「1」または「0」に等しいです。このようなコードを使用して、この int の配列を 1 つの 7 バイト変数に変換するのは本当ですか??

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

常に または のいずれかintの値しか持たない56個の s がある場合、特大パッケージには実際には 56個の s があります。次の方法で修正できます。01bool

1) bool の配列を使用する

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 に答える