2

ビットマスクされたステータス バイトの配列を取得してみましょう。

char status[10];

ここで、各ステータス バイトから 3 番目のビットを取り出して int に入れたいとしましょう。int の LSB は status[0] ビット 3、次は status[1] ビット 3 などです。

int foobits = 0;
for( i = 0; i < 10; i++ )
{
    foobits |= (( status[i] & 0x04 ) >> 2) << i;
}

私の質問は、これを達成するための 1 つのシフトのみを含む別の方法はありますか?

編集: foobits を使用して、status[i] ビット #3 のビット配列を含めようとしています。

4

1 に答える 1

3

あなたはこれを行うことができます

int foobits = 0;
for( i = 0; i < 10; i++ )
{
    foobits |= (status[i] & 0x04) << i;
}
foobits >>= 2;

しかし、なぜ気にするのですか?

「時期尚早の最適化は諸悪の根源です。」-- ドナルド・クヌース

于 2012-09-26T18:49:36.907 に答える