Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема6.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
88.06 Кб
Скачать

6.2 Битовые поля

Элементы структуры можно определить как знаковые или беззнаковые битовые поля шириной от 1 до 16 бит. Битовые поля - это особый вид полей структуры. Они используются для плотной упаковки данных. Общая форма описания для битового поля следующая:

struct [имя_структуры]

{ тип_1 элемент_1: размер в битах;

тип_2 элемент_2 : размер в битах;

...

тип_n элемент_n : размер в битах;}

[ список_описателей ];

где тип – любой целый тип;

размер – целое число от 0 до 16.

Пример:

struct Options {

bool centerX:1;

bool centerY:1;

unsigned int shadow:4;

unsigned int palette:4;

};

Для знаковых полей старший левый бит интерпретируется как знак. Например, если в поле шириной 2 бита записано двоичное 11, то это интерпретируется как 3 для типа unsigned, но как -1 для типа int. Битовые поля могут быть определены только в структурах, объединениях и классах. Доступ к ним осуществляется с помощью тех же операторов “.” и “->”.

#include <iostream.h>

#include <windows.h>

struct Bits

{ unsigned bit1: 5; unsigned bit2: 5;

unsigned bit3: 5; unsigned bit4: 7;} BS;

Void main()

{ BS.bit1 = 25; BS.bit2 = 15; BS.bit3 = 30;

BS.bit4=BS.bit1+BS.bit2+BS.bit3;

cout << BS.bit1 << " " << BS.bit2 << " " << BS.bit3 << endl;

cout << "Sum: " << BS.bit4 << endl;

system("pause");}

6.3. Объединения

Структура данных объединение подобна структуре, однако в каждый момент времени может использоваться (является активным) только один из его компонентов. Шаблон объединения может задаваться записью вида:

union [имя объединения]

{

<имя типа1> <компонента1>;

<имя типа2> <компонента2>;

. . .

<имя типаN> <компонентаN>;

} [список описателей];

Поля структуры размещаются в оперативной памяти одно за другим в той последовательности, в которой перечислены в описании. Поля объединений размещаются, начиная с одного места в памяти и, следовательно, накладываются друг на друга.

Доступ к компонентам объединения осуществляется тем же способом, что и к компонентам структур.

Пример.

#include <iostream.h>

#include <windows.h>

Void main ()

{

union {int a; char b;} kkk;

kkk.a = 45;

cout << kkk.a << endl;

cout << kkk.b << endl;

system("Pause");

}

Объединение применяется для следующих целей:

- инициализации используемого объекта памяти, если в каждый момент времени только один объект из многих является активным;

- интерпретации основного представления объекта одного типа, как если бы этому объекту был присвоен другой тип.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]