4
unsigned int    error_bits =       

                 ( X && Y )
                 | ( A == TRUE)                         << 1
                 | ( B == TRUE)                         << 2
                 | ( C == TRUE && 
                     D == TRUE)                         << 4;

ここでの一般的な概念は、特定の条件に基づいて32ビットのそれぞれをtrueまたはfalseに設定することであると思います。各ビットは、何かのエラーを表します。

上記の構文では、何が設定され、シフトされ、どこで/なぜ設定されているのかについて少し混乱しています。

どんな説明も役に立ちます。

ありがとうございました。

4

3 に答える 3

4

あなたが正しいです。行の後のビットのレイアウトは次のとおりです。

Bits X-5: 0
Bit 4: (C == TRUE && D == TRUE)
Bit 3: 0
Bit 2: B == TRUE
Bit 1: A == TRUE
Bit 0: (X && Y)

最上位ビットから最下位ビットまで。おそらく、このようなものの方が読みやすいでしょう(好みの問題):

unsigned int error_bits = 0;

if( X && Y )     
    error_bits |= 1;

if( A == TRUE )     
    error_bits |= 2;

if( B == TRUE )     
    error_bits |= 4;

if( C == TRUE && D == TRUE )     
    error_bits |= 16;
于 2012-10-10T17:36:29.957 に答える
2

A == TRUEは、AがTRUEの場合に1と評価されます。1 << 1は2、または2番目のビットのみが設定された整数(最下位から番号付け)。1 << 4は16、または5番目のビットのみが設定された整数です。

于 2012-10-10T17:36:14.467 に答える
1

error_bits値は次のように設定されます。

  • 最下位ビット(b0)は、(X && Y)が真の場合、つまりXとYの両方が真の場合に設定されます。
  • aが真の場合にb1が設定されます
  • Bが真の場合にb2が設定されます
  • b3は明確です
  • b4は、CとDの両方が真の場合に設定されます
于 2012-10-10T17:36:13.950 に答える