一种可能性是使用与每个计数器对应的每个位的值定义常量:
#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)