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

Примеры использования битовых полей Вывод значений битовых полей

Объяснить результат!!!

если дана структура с битовыми полями EXAMPLE:

struct EXAMPLE { int i:2;

unsigned j:2;

int :2;

int k: 2;

};

int main()

{

EXAMPLE my_struct;

my_struct.i=3; my_struct.j=3; my_struct.k=-1;

cout << dec << my_struct.i <<" " << my_struct.j <<" "<<my_struct.k << endl;

-1 3 -1

my_struct.i = 2; my_struct.j = 2; my_struct.k = 1;

cout << dec << my_struct.i << " "<< my_struct.j << " " <<my_struct.k << endl;

-2 2 1

_getch();

return 0;

}

Формирование кода символа с помощью битовых полей объединения

Формирование кода символа ‘D’ (6810=4416).

Вариант 1:

union

{char simb;

struct {int x:5;

int y:3;

} hh;

}cod;

int main()

{

cod.hh.x=4;

cod.hh.y=2;

cout<<cod.simb; // D (код 44)

_getch();

return 0;

}

7 0

0

1

0

0

0

1

0

0


hh.x  (5 битов)

hh.y (3 бита)

Формирование кода символа ‘D’ (6810=4416).

Вариант 2.

Используется функция, которая упаковывает в байт остатки от деления на 16 двух чисел

int main()

{

int a=36, b=20; //два числа для формирования кода символа ‘D’

cout << cod(a, b) << endl;

_getch();

return 0;

}

unsigned char cod (int a, int b)

{ union {

unsigned char z;

struct {unsigned int x:4;

unsigned int y:4;

} hh;

} un;

un.hh.x=a%16 ; //остаток равен 4

un.hh.y=b%16 ; //остаток равен 4

return un.z ; //возвращает символ с кодом 44

}

Формирование байта и вывод на экран его двоичного представления

(функция cod() упаковывает в байт два числа

функция binary() выводит на экран двоичное представление байта-параметра):

unsigned char cod (int a, int b);

void binary (unsigned char ch);

int main()

{ int k, m, n ;

cout << "m= ? n=? : ";

cin >> m >> n;

k = cod (m, n); //упаковка значений в байт

cout << "cod= " << hex <<k <<endl; //вывод кода

cout << "simvol= " << char(k) << endl; //вывод символа

cout << dec << endl;

binary(k) ; //вывод на экран двоичного представления байта

_getch();

return 0;

}

unsigned char cod (int a, int b)

{union {

unsigned char z;

struct {unsigned int x:4;

unsigned int y:4;

} hh;

} un;

un.hh.x=a%16 ; //получение остатков от чисел-аргументов

un.hh.y=b%16 ;

return un.z ; //возвращает символ с полученным кодом 44

}

void binary (unsigned char ch) //вывод на экран двоичного представления байта

{ union { //определение локального объединяющего типа

unsigned char ss;

struct {

unsigned a0:1; //каждый бит получает название

unsigned a1:1;

unsigned a2:1;

unsigned a3:1;

unsigned a4:1;

unsigned a5:1;

unsigned a6:1;

unsigned a7:1;

} byte;

} cod; //определение локальный переменной-объединения

cod.ss=ch; //занесение в объединение значения аргумента функции

cout << "nomera bitov: 7 6 5 4 3 2 1 0\n";

cout <<"znachenie: ";

cout << " " << cod.byte.a7 << " " << cod.byte.a6 ; //так как все биты

cout << " " << cod.byte.a5 << " " << cod.byte.a4 ; //имеют названия

cout << " " << cod.byte.a3 << " " << cod.byte.a2 ;

cout << " " << cod.byte.a1 << " " << cod.byte.a0 ;

cout <<endl;

}

Открыв наук зелёный том,

Я долго думал, а потом

Закрыл его и кинул в реку.

Науки вредны человеку,

Науки тянут нас в беду.

Возьмемся лучше за еду!

Даниил Хармс

А вот теперь:

Программирование – лекция 18 (лекции Стрикелевой Л.В.)

22