русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Struct B


Дата добавления: 2013-12-23; просмотров: 1272; Нарушение авторских прав


A a;

Битовые поля структур и объединений

Объединения

Объединение - это производный тип языка Си, включающий в себя множество элементов, элементы могут быть различных типов и располагаются в оперативной памяти, начиная с одного и того же адреса (т.е. элементы или поля накладываются друг на друга).

Объявление объединения похоже на структуры, но вместо ключевого слова struct используется union .

С помощью объединения один и тот же участок памяти можно интерпретировать по-разному. В следующем примере объявлено объединение MyUnion и переменная типа объединения u1, в объединении одно поле имеет тип int и занимает в памяти 4 байта, а второе поле накладывается в памяти на первое и является массивом из 4-х элементов типа char. Таким образом, с одним и тем же участком памяти можно работать как с целым числом или же можно работать с 4-мя байтами как с массивом типа char.

#include <stdio.h>

union MyUnion

{

int item32; // Поле объединения занимает 4 байта

char item8[4]; // На поле из 4-х байт накладывается массив из 4-х элементов

// по 1 байту

} u1;

void main()

{

 

// Заполняем 4 байта значениями

u1.item8[0]=1; u1.item8[1]=2;

u1.item8[2]=3; u1.item8[3]=4;

printf("%x", u1.item32); //Печатаем 4 байта как целое число. Печатается 4030201

 

}

 

Внутри структур и объединений можно использовать битовые поля.

Битовое поле- это поле структуры или объединения, представляющее собой целое или беззнаковое целое значение (любые стандартные целые типы), занимающее в памяти фиксированное число битов (не более, чем соответствующий целый тип), размер битового поля задается в битах и не обязательно кратен целому числу байтов.

С битовыми полями можно работать так же, как с обычными целыми полями, только следует учитывать их диапазон.



Для битовых полей не определена операция &, не существует указателей на битовые поля.

Пример структуры с битовыми полями:

struct A {

int a1: 10; // Битовое поле из 10 бит

int a2: 14; // Битовое поле из 14 бит

…..

};

Далее создаем переменную структурного типа и можем обращаться к битовым полям

a.a1=125;

Все, что связано с битовыми полями является системно зависимым. Например, только в конкретной реализации определяется, могут ли поля перекрывать границы слов. В некоторых компиляторах можно поля в структурах выравнивать по границам слов или осуществлять плотную упаковку. На уровне правил языка Си (Си++) можно пропускать заданное число бит, если использовать битовое поле без имени.

{

int a1:12;

int a2:14;

int :6; // Пропускаем 6 бит

….

};

Приведем пример объединения, в котором первое поле занимает 1 байт, а второе поле является переменной структурного типа, включающей 8 битовый поле, каждое по 1 биту. Тем самым можно работать с 1 байтом, как с целым числом или обращаться к отдельным битам этого байта.

#include <stdio.h>

union MyByte

{

unsigned char byte;

struct

{

unsigned char b1: 1;

unsigned char b2: 1;

unsigned char b3: 1;

unsigned char b4: 1;

unsigned char b5: 1;

unsigned char b6: 1;

unsigned char b7: 1;

unsigned char b8: 1;

} bits;

};

 

void main()

{

union MyByte B;

// Заполняем отдельные биты

B.bits.b1=1;

B.bits.b2=1;

B.bits.b3=0;

B.bits.b4=0;

B.bits.b5=1;

B.bits.b6=0;

B.bits.b7=1;

B.bits.b8=0;

printf("%x", B.byte); // Будет напечатано 53 в шестнадцатиричной СС или 01010011

 

}

 



<== предыдущая лекция | следующая лекция ==>
Инициализация структуры | Определение, описание и вызов функции


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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