C编程位表示

Cod*_*lus 2 c binary permutation bit indicator

例如,我有3个计数器(我基本上想要表示为真值(counter> 0 true;否则为false).这导致我的真值的2 ^ 3 = 8个排列如下所示:

000 001 010 011 100 101 110 111

然后每个排列映射到一个状态.如何将这些计数器转换为位级别的二进制表示,然后如何在开关结构中使用二进制表示来映射到状态?(例如,001映射到"包含x",010映射到"包含y",011将映射到"包含x和y".这些都可以移植到其他操作系统吗?

Mar*_*ins 7

一种可能性是使用与每个计数器对应的每个位的值定义常量:

#define CTR1_BIT 0x01
#define CTR2_BIT 0x02
#define CTR3_BIT 0x04
Run Code Online (Sandbox Code Playgroud)

然后根据计数器值(零或非零)设置位.的|运算符执行逐位逻辑或运算(见此获得更多信息).如果ctr1非零,则只设置变量中的最低位state.如果ctr2非零,则将第二位state设置为1并保持其他位不变.等等

   int state = 0;

   if ( ctr1 )
      state |= CTR1_BIT;
   if ( ctr2 )
      state |= CTR2_BIT;
   if ( ctr3 )
      state |= CTR3_BIT;
Run Code Online (Sandbox Code Playgroud)

然后打开可能的状态值:

   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);
      }
Run Code Online (Sandbox Code Playgroud)