Struct B
{
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
}
Директива определения типа typedef
Производный тип задается с помощью * [] struct union, иногда удобно производному типу присвоить одно простое имя, это можно сделать с помощью typedef. При этом после директивы typedef формат определения нового типа соответствует формату определения переменной данного типа, но введенное имя является не именем переменной, а именем нового типа.
Пример:
struct A { … };
A * m[10]; // Массив из 10 указателей на структуру A
Можно поступить по- другому:
typedef A *M[10]; // M – имя нового типа, задающего
// массив из 10 указателей на структуру A
M m; // Массив из 10 указателей на структуру A
Дата добавления: 2015-08-14; просмотров: 561;