Добавил:
ПОИТ 2016-2020 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
40
Добавлен:
29.04.2018
Размер:
824.83 Кб
Скачать

Void fNumber(number * const doc)

{ for (int i = 0; i <= 99; i++)

{ doc[i].group = i % 3 + 9;

doc[i].department = 5;

doc[i].course = 1;

}

}

Допустимы неименованные поля; они не влияют на смысл именованных полей, но с ними можно улучшить размещение.  Если Имя пропущено, то соответствующее количество бит не используется (пропускается ).

struct  { unsigned a1 : 4;

  unsigned  : 2;

  unsigned a3 : 5;

  unsigned a4 : 2;

} prim1;  

 

Длина структуры всегда кратна восьми.

Поле нулевой длины обозначает выравнивание на границу следующего слова:

struct  { unsigned b1 : 1;

unsigned  : 0;

unsigned b3 : 5;

unsigned b4 : 2;

} prim2;

В структуре могут быть смешаны обычные переменные и поля бит

struct man

{ // 31 18 17 10 9 0

char name[20]; // ----------------------------------

unsigned dd : 10; // | yy | mm | dd |

unsigned mm: 8; // ----------------------------------

unsigned yy : 14;

char *address; // 32 22 |21 16| 15 6|5 0

int xx : 6; // ---------------------------------

int : 10; // | | zz | ... | xx |

int zz : 6; // ---------------------------------

};

. . . . . . . . . . . . .

man A;

A.dd = 12;

A.mm = 5;

A.yy = 96;

A.dd++;

A.zz = A.xx;

Пример

Битовые поля удобно использовать для решения задач, связанных с булевой логикой. Напр., представление цветов, шифрование данных, перевод чисел в двоичную систему счисления и т.п.

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

Пример. Ввод и печать информации о сотрудниках

# include <iostream>

using namespace std;

enum Dep // список отделов

{ Manag = 1 , Law, Des, Prog } deps;

struct Date

{ unsigned short nDay : 5; // 5 битов - 32

unsigned short nMonth : 4; // 4 бита - 16

unsigned short nYear : 11; // 11 бит - 2048

} ;

struct Sotr // структура для сотрудника

{ char Name[30]; // ФИО

int Dep; // Отдел

Date Priem; // Дата найма

};

Sotr S[50]; // массив сотрудников

char *NameDep(int n) //название отдела по номеру

{ char* dep;

switch(n)

{ case 1: dep="Менеджеры"; break;

case 2: dep="Юристы"; break;

case 3: dep="Дизайнеры"; break;

case 4: dep="Программисты"; break;

}

return dep;

}

Соседние файлы в папке Лекции