Доступ к отдельному биту.

 

Одним из методов, позволяющих доступ к биту - это использование полей битов. Поля битов – это специальный тип членов структуры, в котором определено из скольких бит состоит каждый элемент. Основная форма объявления такой конструкции следующая:

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);

}