Указатели и структуры данных. Битовые поля в структурах

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

   
Структуры обладают замечательным свойством: с их помощью можно задавать битовые поля: определять в переменной
типа 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)  .   .   .

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий