Шаг 349.
Библиотека STL. Специальные контейнеры. Битовые поля. Примеры использования битовых полей. Битовое поле как набор флагов

    На этом шаге мы приведем пример использования битовых полей.

    В первом примере битовое поле интерпретируется как набор флагов. Каждый флаг представлен некоторым значением перечисляемого типа, определяющим позицию бита в поле. В нашем примере биты представляют различные цвета; таким образом, каждое значение перечисляемого типа определяет один цвет. Битовые поля являются удобным средством для работы с переменными, содержащими произвольную комбинацию цветов:

//---------------------------------------------------------------------------

#include <vcl.h>
#include <bitset>
#include <iostream>

#include <conio.h>   //необходимо для getch()

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
using namespace std;

std::string ToRus(const std::string &in)
{
  char *buff = new char [in.length()+1];
  CharToOem(in.c_str(),buff);
  std::string out(buff);
  delete [] buff;
  return out;
}

int main()
{

  // Перечислимый тип для задания битов
  // - каждый бит определяет цвет
  enum Color { red, yellow, green, blue, white, black, //...,
               numColors };

  // Создание битового поля для всех битов/цветов
  bitset<numColors> usedColors;

  // Установка битов двух цветов
  usedColors.set(red);
  usedColors.set(blue);

  // Вывод данных битового поля
  cout << "bitfield of used colors:   " << usedColors
       << endl;
  cout << "number   of used colors:   " << usedColors.count()
       << endl;
  cout << "bitfield of unused colors: " << ~usedColors
       << endl;

  // Если в битовом поле использован хотя бы один цвет...
  if (usedColors.any()) {
      // перебрать все цвета в цикле
      for (int c = 0; c < numColors; ++c) {
          // Если флаг текущего цвета установлен...
          if (usedColors[(Color)c]) {
              //...
          }
      }
  }
}

//---------------------------------------------------------------------------

    На следующем шаге мы рассмотрим еще один пример использования битовых полей.




Предыдущий шаг Содержание Следующий шаг