Ввод В ы в о д

a b c a b c a&b a|b a&c x=a&c a+c

1 1 1 1 1 1 1 1 1 1 2

2 2 2 0 0 2 0 0 0 0 2

4 4 4 0 0 4 0 0 0 0 4

1 2 8 1 0 0 0 1 0 0 1

Как показывает проведённый компьютерный эксперимент, битовые поля можно выводить, но нельзя вводить. Поэтому для ввода использовали обычную дополнительную переменную b1.

Если введённое число в двоичном представлении занимает большее количество бит, чем указано при объявлении соответствующего поля битов, то остаются крайние правые биты. Например, так как число 810=10002 в трёх битах разместить нельзя, то в переменной c остаются три правые бита, т.е. число 0. Поэтому на практике следует разумно выбирать длины битовых полей. Если известно, например, что поле будет содержать информацию, которая характеризуется двумя возможными значениями типа “да” или “нет” (сдал или не сдал зачёт, занимается или не занимается спортом и т. п.), то для её хранения достаточно одного бита. В таком случае на одном битовом поле мы окономим память, по крайней мере, в восемь раз, так как без использования таких полей мы бы объявили нашу переменную в лучшем случае с типом char.

Этот пример показывает, что для битовых полей можно использовать те же операции, что и для целых чисел (арифметические, битовые и др.).

В качестве упражнения предлагается продолжить компьютерный эксперимент, изменив размерности полей битов и операции над ними.

Поля битов в объединениях используются для доступа к нужным битам другого поля простого типа (char, float, int и др), входящего в объединение.

Пример 2 (+) показывает, как “посмотреть” код нажатой на клавиатуре клавиши, включая и управляющие (Insert, Delete, стрелки и другие).

int main()

{ /* Объявляем структурный тип, включающий восемь полей битов, каждый из которых имеет размерность один бит. * /

struct TMyByte

{ unsigned b1:1; unsigned b2:1;

unsigned b3:1; unsigned b4:1;

unsigned b5:1; unsigned b6:1;

unsigned b7:1; unsigned b8:1;

};

union TUI

{ /* Структурная переменная из восьми полей битов (но не массива, массив полей битов недопустим!) для представления кода символа ch в двоичной системе счисления */

TMyByte MyB;

/*Структурная переменная из двух полей битов, каждое длиной четыре, для получения шестнадцатеричного представления символа ch. */

struct { unsigned n1:4;

unsigned n2:4;

} num16;

char ch; // Символ

} N;

cout<<"0--EXIT"<<endl;

cout<<"Symbol Code16 Code10 Code2"<<endl;

while (1)

{ cout<<" ";

N.ch=getche();

/* Ввод символа. При этом клавишу “ Enter ” нажимать не надо и символ будет отображаться на экране. */

if (N.ch=='0')break;

/* Вывод кода в шестнадцатеричной системе счисления */

cout<<" "<< hex<<N.num16.n2<<N.num16.n1;

/* Вывод кода в десятичной системе счисления */

printf(" %d ", N.num16.n2*16+N.num16.n1);

gotoxy(30,wherey());

/* Вывод восьми полей битов, т.е.

вывод кода в двоичной системе счисления */

cout<<N.MyB.b8<<N.MyB.b7<<N.MyB.b6<<N.MyB.b5<<

N.MyB.b4<<N.MyB.b3<<N.MyB.b2<<N.MyB.b1<<endl;

}

return 0; }

Результат.


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



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