Одним из методов, позволяющих доступ к биту - это использование полей битов. Поля битов – это специальный тип членов структуры, в котором определено из скольких бит состоит каждый элемент. Основная форма объявления такой конструкции следующая:
struct имя_стуктуры
{
тип имя1: длина в битах
тип имя2: длина в битах
….
тип имяn: длина в битах
};
При этом тип может быть только целым (int).
Лекция 5.
Пример, иллюстрирующий доступ к каждому биту числа:
#include<iostream.h>
void bin(unsigned char ch)
{
/* union объединение – специальная структура, которая хранит элементы в разделяемом адресном пространстве. Размером объединения является размер его наибольшего элемента. Доступ к элементам осуществляется через точку.*/
union
{
unsigned char cc;
struct
{
unsigned a0:1;
unsigned a1:1;
unsigned a2:1;
unsigned a3:1;
unsigned a4:1;
unsigned a5:1;
unsigned a6:1;
unsigned a7:1;
} byte;
}cod;
cod.cc=ch;
// вывод значения каждого бита числа
cout<<" номера битов 7 6 5 4 3 2 1 0";
cout<<" значения битов ";
cout<<cod.byte.a7<<" "; cout<<cod.byte.a6<<" ";
cout<<cod.byte.a5<<" "; cout<<cod.byte.a4<<" ";
cout<<cod.byte.a3<<" "; cout<<cod.byte.a2<<" ";
cout<<cod.byte.a1<<" "; cout<<cod.byte.a0<<" ";
}
main()
{
unsigned int k, m,n;
cout<<" m=";cin>>m;
cout<<" k=";cin>>k;
n=m+k;
bin(m);// вывод кода переменной m
bin(k);
bin(n);
}
Пример вывода программы может быть таким:
m=3
k=4
номера битов 7 6 5 4 3 2 1 0
значения битов 0 0 0 0 0 0 1 1
номера битов 7 6 5 4 3 2 1 0
значения битов 0 0 0 0 0 1 0 0
номера битов 7 6 5 4 3 2 1 0
значения битов 0 0 0 0 0 1 1 1
Задание для самоконтроля:
Определить, что выведется на экран в результате выполнения программы:
#include <iostream.h>
main()
{
int i,j,k;
char ii,kk;
ii=i=4;
j=7;
k=j&i;
cout<<" ";
cout<<j<<" и "<<i<<"= "<<k;
k=j|i;
cout<<" ";
cout<<j<<" или "<<i<<"= "<<k;
k=j^i;
cout<<" ";
cout<<j<<" исключающее или "<<i<<"= "<<k;
k=i<<2;
cout<<" ";
cout<<int(i)<<" сдвиг влево на 2 = "<<int(k);
k=j>>2;
cout<<" "<<j<<" сдвиг вправо на 2 = "<<k;
kk=ii<<5;
cout<<" "<<int(ii)<<" сдвиг влево на 5 = "<<int(kk);
kk=ii<<6;
cout<<" "<<int(ii)<<" сдвиг влево на 6 = "<<int(kk);
}