
- •Лекция 18 Структуры. Объединения. Поля битов в структурах
- •Структура как пользовательский тип и совокупность данных Определение шаблона структуры и структурной переменной
- •Расположение структурных переменных в памяти
- •Инициализация структурных переменных
- •Вложенные структуры
- •Операции над структурными переменными
- •Массив структур
- •Структура в качестве аргумента функции
- •Примеры работы со структурами
- •Объединение как пользовательский тип и совокупность данных Определение объединения и переменной объединяющего типа
- •Примеры использования объединений Получение внутреннего представления вещественного числа
- •Использование перечислимого типа для обращения к полям объединения
- •Битовые поля структур и объединений Определение битовых полей
- •Примеры использования битовых полей Вывод значений битовых полей
- •Формирование кода символа с помощью битовых полей объединения
- •Формирование байта и вывод на экран его двоичного представления
Примеры использования битовых полей Вывод значений битовых полей
Объяснить результат!!!
если дана структура с битовыми полями 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
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 (лекции Стрикелевой Л.В.)