Самостоятельно битовые переменные существовать не могут. Их можно включать в структуры, объединения и классы в качестве полей. В общем виде объявление битового поля выглядит следующим образом:
тип имя: длина;
Здесь имя — идентификатор поля. В качестве типов можно использовать целые типы 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; }
Получим следующий результат: