2

たとえば、3つのカウンターがあります(これは基本的に真理値として表現したいです(カウンター> 0 true、それ以外の場合はfalse)。これにより、次のように真理値の2 ^ 3=8の順列になります。

000 001 010 011 100101110111

次に、各順列は状態にマップされます。これらのカウンターをビットレベルでバイナリ表現に変換するにはどうすればよいですか。次に、スイッチ構造でバイナリ表現を使用して状態にマップするにはどうすればよいですか。(例:001は「xを含む」にマップされ、010は「yを含む」にマップされ、011は「xとyを含む」にマップされます。これはすべて他のオペレーティングシステムにも移植可能ですか?

4

1 に答える 1

7

1つの可能性は、各カウンターに対応する各ビットの値で定数を定義することです。

#define CTR1_BIT 0x01
#define CTR2_BIT 0x02
#define CTR3_BIT 0x04

次に、カウンタ値(ゼロまたは非ゼロ)に基づいてビットを設定します。演算子はビット単位の|論理OR演算を実行します(詳細については、これを参照してください)。がゼロ以外の場合ctr1、変数の最下位ビットを設定するだけですstatectr2がゼロ以外の場合、2番目のビットをstate1に設定し、他のビットは変更しません。等

   int state = 0;

   if ( ctr1 )
      state |= CTR1_BIT;
   if ( ctr2 )
      state |= CTR2_BIT;
   if ( ctr3 )
      state |= CTR3_BIT;

次に、可能な状態値をオンにします。

   switch ( state )
      {
      case 0x00:
         printf( "state 0\n" );
         break;
      case 0x01:
         printf( "state 1\n" );
         break;
      case 0x02:

         ...

      case 0x07:
         printf( "state 7\n" );
         break;
      default:
         printf( "Invalid state\n" );
         assert(0);
      }
于 2012-01-27T23:05:26.473 に答える