Скачать презентацию Л 7 2012 -2013 г Ионов Скачать презентацию Л 7 2012 -2013 г Ионов

7_2012.pptx

  • Количество слайдов: 8

Л. № 7, 2012 -2013 г. , Ионов Ю. Г. Объединения 1. Способы описания Л. № 7, 2012 -2013 г. , Ионов Ю. Г. Объединения 1. Способы описания объединения. Примеры. 2. Определение элементов объединения. Примеры. 3. Доступ к элементам объединения. Адресные выражения. Примеры. 4. Выделение памяти под объединения. 5. Примеры программ , использующих объединения.

Тема: Объединение. Краткие сведения. Объединение – это тоже структура, но которая на момент объявления Тема: Объединение. Краткие сведения. Объединение – это тоже структура, но которая на момент объявления создает только одно поле (наибольшее) из объявленных. 14. 02. 2018 2

Объявление объединения (union) Примеры: union { }; описание элемента 1; . . . описание Объявление объединения (union) Примеры: union { }; описание элемента 1; . . . описание элемента n; Операция точка: inform. fio ua. al[0] Операция стрелка : pp_1 ->name union { char fio[30]; char adres[80]; int vozrast; int telefon; } inform; // union { int ax, name; char al[2]; } ua, *pp_1; - поля доступ к членам объединения: имя объединения. член или указатель объединения ->член, то есть точно так же, как и в случае структур. 14. 02. 2018 3

Замечание об инициализации объединений Так как поля объединения это альтернативы, то инициализировать одновременно все Замечание об инициализации объединений Так как поля объединения это альтернативы, то инициализировать одновременно все поля невозможно. Однако инициализация не отменяет возможности использовать другие поля. (см. пример) 14. 02. 2018 #include #include void main () { clrscr(); union name { int b; char a[5]; char c[10]; }; name my = {5}; // 1 -го поля for (int i=0; i<5; i++) my. a[i]=‘ 1’; // 2 -го поля cout <

Л. № 5, 2012 -2013 г. , Ионов Ю. Г. Пример программы (слайды 4 Л. № 5, 2012 -2013 г. , Ионов Ю. Г. Пример программы (слайды 4 -7) // Побитовая печать содержимого регистра данных # include void main (void) { unsigned char k; // Будет равен битовому коду. int m, n; // Они делятся на 16 для формирования битовых полей. void binar (unsigned char); /* В функцию входит байт и там происходит обратное преобразование – побитово расшифровывается за счет обращения к отдельным полям. */ unsigned char cod (int, int); /* В функции производится запись данных в битовые поля, а результат возвращается из того же объединения в виде одного байта. */ } printf ("nm ="); scanf ("%d", &m); //m – вспомогательная переменная printf ("nn ="); scanf ("%d", &n); //n - вспомогательная переменная k = cod (m, n); printf ("cod = %u", k); binar (k); //см. продолжение – функцию cod ( ), входные данные //которой упаковываются в один байт 14. 02. 2018 5

unsigned char cod (int a, int b) { union { unsigned char z; // unsigned char cod (int a, int b) { union { unsigned char z; // z – используется для упаковки struct { unsigned int x: 4; // Младшие четыре бита unsigned int y: 4; // Старшие четыре бита } hh; //hh - экземпляр структуры } un; //un - экземпляр объединения un. hh. x = a%16; un. hh. y = b%16; return un. z; // Упаковка в один байт и его передача } // еnd cod //ниже описана функция binar() - распаковки и побитовой // печати числа, возвращенного функцией cod(). 14. 02. 2018 6

void binar (unsigned char ch) { union { unsigned char ss; struct { unsigned void binar (unsigned char ch) { union { unsigned char ss; struct { unsigned a 0: 1; unsigned a 1: 1; unsigned a 2: 1; unsigned a 3: 1; unsigned a 4: 1; unsigned a 5: 1; unsigned a 6: 1; unsigned a 7: 1; } byte; } cod; cod. ss = ch; //Печатаем, как предписано заголовком, т. е. со старшего //бита. printf ("n. Номера битов: 7 6 5 4 3 2 1 0"); printf ("n. Значения битов: %d %d", cod. byte. a 7, cod. byte. a 6, cod. byte. a 5, cod. byte. a 4, cod. byte. a 3, cod. byte. a 2, cod. byte. a 1, cod. byte. a 0); } 14. 02. 2018 7

Результаты выполнения программы: // // 14. 02. 2018 m=1 - входные данные n=3 cod Результаты выполнения программы: // // 14. 02. 2018 m=1 - входные данные n=3 cod 49 номера битов: 7 6 5 4 3 2 1 0 значения битов: 0 0 1 1 0 0 0 1 m=0 - входные данные n=1 cod 16 номера битов: 7 6 5 4 3 2 1 0 значения битов: 0 0 0 1 0 0 8