C Программирование битового представления - PullRequest
2 голосов
/ 28 января 2012

Например, у меня есть 3 счетчика (которые я, по сути, хочу представить как значения истинности (counter> 0 true; в противном случае false). Это приводит к 2 ^ 3 = 8 перестановкам для моих значений истинности, как показано:

000 001 010 011 100 101 110 111

Затем каждая перестановка отображается в состояние. Как мне преобразовать эти счетчики в двоичное представление на уровне битов, а затем, как бы я использовал двоичное представление в структуре переключателей для сопоставления с состоянием? (например, 001 сопоставляется с «содержит x», а 010 сопоставляется с «содержит y», а 011 сопоставляется с «содержит x и y». Будет ли все это переносимо и на другие операционные системы?

1 Ответ

7 голосов
/ 28 января 2012

Одной из возможностей является определение констант со значением для каждого бита, соответствующего каждому счетчику:

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

Затем на основе значений счетчика (ноль или не ноль) устанавливаются биты.Оператор | выполняет побитовую логическую операцию ИЛИ (см. для получения дополнительной информации ).Если ctr1 не равен нулю, он просто устанавливает младший бит в переменной state.Если ctr2 не равен нулю, он устанавливает второй бит в state в 1 и оставляет другие биты без изменений.и т. д.

   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);
      }
...