Шаг 67.
Microsoft Visual C++ 2010. Язык С/С++.
Указатели и структуры данных. Битовые поля в структурах

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

    Структуры обладают замечательным свойством: с их помощью можно задавать битовые поля: определять в переменной типа int группы подряд расположенных битов, значения которых можно задавать и с которыми можно работать как с элементами структуры. Описание битовых полей чере структуру задается следующим образом:

struct
{
  unsigned name1: size1; //имя поля и его размер
  unsigned name2: size2; //имя поля и его размер
  .   .   .	
  unsigned nameK: sizeK; //имя поля и его размер 
} flags;

    Это обычное задание шаблона и на нем экземпляра структуры.

    Размер - это количество битов, расположенных подряд. Сумма всех полей не должна выходить за пределы размера переменной типа int. Если же это случится, то первое битовое поле, превысившее размер переменной int, pасположится в следующем участке памяти, отведенном для переменной типа int.


    Пример:
struct
{
  unsigned n1: 1;   //имя поля и его размер 
  unsigned n2: 2;   //имя поля и его размер 
} flags;

    Здесь определен экземпляр структуры - переменная flags, содержащая два битовых поля: одно однобитовое, другое - двубитовое. На поля можно ссылаться как на отдельные члены структуры: flags.n1, flags.n2. Эти поля ведут себя подобно целым без знака и могут участвовать в арифметических операциях, применяемых к целым без знака. Например, для определенных выше полей можно записать:

  flags.n1 = 1; //включен бит 
  flags.n1 = 0; //выключен бит
  flags.n2 = 3; //включены биты 1,2 поля (3 в десятичной системе равно 11 в двоичной).

    Для проверки значения битов можно писать:

  if (flags.n2 == 1 && flags.n1 == 0)  .   .   .

    На следующем шаге мы рассмотрим категории памяти.




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