Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Разрядная сетка




Программа

J L

J L

JL

J L

РАЗРЯДНАЯ СЕТКА

Битовые поля

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

Пример

Общая форма объявления объединения

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

{

тип имя объекта 1; тип имя объекта 2;

тип имя объекта п; } имя переменной;

Видно, что объединение подобно структуре, однако в определённый момент времени может использоваться только один из элементов объединения. Объединения применяются для следующих целей:

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

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

Значение текущего элемента объединения теряется, когда другому элементу объединения присваивается значение.

 

 

 

#include <stdio.h>  
union data record { char s[4];  
 
int i;  
char c;  
} data;  
main () { printf("\пРазмер памяти под  
объединение data record
%d байт\п", sizeof(data));  
printf("\пАдреса переменных: \ns \t %p\n%i \t %p \n

%c \t %p \n", data.s,&data.i,&data. c]

Размер памяти под объединение data record 4 байт

Адреса переменных: s 0552 i 0552 с 0552

Используя структуры, можно упаковать целочисленные компоненты ещё более плотно, чем это было сделано с использованием массива. При упаковке целых объектов, как правило, допускается применять только беззнаковый тип unsigned int. Это обусловлено тем, что место, отводимое под объект, используется полностью, включая знаковый разряд.

В Си под объект типа unsigned int, как правило, отводится два байта памяти, т. е. 16 разрядов. Эти 16 разрядов (бит) можно разбить на битовые поля, каждое из которых выделяется для определенной переменной типа unsigned int. Пример размещения битового поля в оперативной памяти показан на рис. 1.10.

P^Tl P^Tir^Tl П^ПРГЯ1 ГГоЦпэ~пГ^Г1 ПП1 ГёЦr^Hn^Tl Г^ИГ^ИГП1


S





j



Рис. 1.10

Здесь под переменные / и s выделено по два бита памяти, под переменные р и к по три бита, под переменную j шесть бит. При работе с битовыми полями нужно внимательно следить за тем, чтобы значение переменной не потребовало памяти больше, чем под неё выделено.

Пример. Разработать программу, осуществляющую упаковку целых переменных i,j, k,p,SB битовые поля и вводящую на печать содержимое памяти, отведенной под эти переменные.


 

 

 

#include <stdio.h>  
struct field t { unsigned i :ype  
2;  
unsigned j 6;  
unsigned к 3;  
unsigned p 2;  
unsigned s 2;  
} my field;    
main () { my field.i    
= 3;  
my field.j = 20;  
my field.к = 2;  
my field.p = 1;  
my field.s = 0;  
printf("\n } my field = = %u \n", my field);

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


наш

15ЦГТ4] ЩЩ




Поделиться с друзьями:


Дата добавления: 2014-11-29; Просмотров: 902; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.