Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ПИ_ИКТ Программирование по С++ (1 семестр) _Хотов.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
5.83 Mб
Скачать

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

Битовые поля – это особый вид полей структуры. Они используются для плотной упаковки данных, например, флажков типа «да/нет». Минимальная адресуемая ячейка памяти – 1 байт, а для хранения флажка достаточно одного бита. При описании битового поля после имени через двоеточие указывается длина поля в битах (целая положительная константа).

struct Options

{

bool centerX:1;

bool centerY:1;

unsigned int border_type:2;

unsigned int color_index:4;

}

Битовые поля могут быть любого целого типа. Имя поля может отсутствовать, такие поля служат для выравнивания на аппаратную границу. Доступ к полю осуществляется обычным способом – по имени. Адрес поля получить нельзя, однако в остальном битовые поля можно использовать точно так же, как обычные поля структуры. Следует учитывать, что операции с отдельными битами реализуются гораздо менее эффективно, чем с байтами и словами, так как компилятор должен генерировать специальные коды, и экономия памяти под переменные оборачивается увеличением объема кода программы. Размещение битовых полей в памяти зависит от компилятора и аппаратуры.

6 Пример

Приведем вариант программной реализации одной из задач:

/*

1. Описать структуру с именем Man (человек), содержащую следующие поля:

• фамилия и инициалы;

• возраст;

• доход (в руб.)

2. Написать программу, выполняющую следующие действия:

• ввод с клавиатуры данных в массив, состоящий из десяти структур типа Man; записи должны быть упорядочены по возрастанию возраста;

• вывод на дисплей фамилий и доходов каждого человека;

*/

#include <stdio.h>

#include <conio.h>

#include <iostream>

using namespace std;

#define SIZE 10 // размерность строки

struct Man{

char name[SIZE]; // фамилие и инициалы

int vozrast;

float doxod;

};

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

Man Init_st(int i)//вводится элементы структурa

{

Man x;

cout<<i<<"-ый человек "<<endl;

cout<<"ФИО : "; cin>>x.name;

cout<<"Возраст : "; cin>>x.vozrast;

cout<<"Доход : "; cin>>x.doxod;

return x;

}

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

void Sort_el(int m, Man *x)//сортировка масс. подоходам

{

Man y; int k=1, i=0;

while(i<m && k==1){

k=0;

for( int j=0;j<m-1; j++){

if(x[j].doxod>x[j+1].doxod)

{

y = x[j]; x[j]=x[j+1]; x[j+1]=y;

k=1;

}

}

}

}

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

int Show_st(int m, Man *x){

for(int i=0;i<m;i++)

{

cout<<"------------------"<<endl;

cout<<"Фамилие возраст доход"<<endl;

printf("\n %10s %3d %7.3f ", x[i].name,x[i].vozrast,x[i].doxod);

}

return 0;

}

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

int main() {

setlocale(LC_ALL, "russian");

Man *a;// указатель исполь. для пред. массива

int n; // n размерность массива

cout<<"Введите кол-во элементов массива: "; cin>>n;

a=new Man[n]; //создание динамического массива

for(int i=0;i<n;i++) a[i]=Init_st(i);

Sort_el(n,a); // сортировка

Show_st(n,a); // вывод структуры

getch();

delete (a); return 0;

}

Результат работы программы: