Поля битов (битовые поля)

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

тип имя: длина;

Здесь имя — идентификатор поля. В качестве типов можно использовать целые типы int, unsigned или signed. Длина определяет размер поля в битах (а не в байтах) и может быть в диапазоне от 1 до 16 бит для 16-битных сред и от 1 до 32 бит для 32-битных сред. Битовые поля единичной длины должны объявляться как unsigned, так как один бит не может иметь знака.

Рассмотрим следующий пример1. (+)

int main()

{ struct TS

{ /* Кроме полей битов в структуре могут быть и поля других типов */

// char FIO[20];

// float zpl;

unsigned a:1; // Объявляем 6 полей битов

unsigned b:1; unsigned c:3;

unsigned y:1; unsigned z:1;

unsigned x:3;

} S;

unsigned b1;

// gets(S.FIO); cin>>S.zpl;

cout<<"1000 - exit"<<endl;

cout<<" a b c a & b a | b a & c x a+c "<<endl;

while (1)

{ /* cin>>(S.a); Ошибка! Компилятор не пропускает!. Поэтому для ввода поля битов используем вспомогательную переменную b1 * /

cin>>b1; if (b1==1000) break; S.a=b1;

cin>>b1; S.b=b1;

cin>>b1; S.c=b1;

S.y=S.a & S.b;

printf(" %d %d %d %d ",S.a, S.b, S.c, S.y);

S.z=S.a | S.b; S.x=S.a & S.c;

cout<< S.z<< " "<<(S.a & S.c)<<" "

<<S.x<<" "<<S.a+S.c<<endl;

}

return 0; }

Получим следующий результат:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: