русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Поля бітів


Дата додавання: 2014-04-22; переглядів: 928.


Поля бітів – це особливий вид елементів структур та об’єднань. Такі поля складаються з послідовних бітів, записаних в дане цілого типу. Поля бітів застосовують, коли необхідно мати доступ до окремих бітів всередині байта або слова даних. Оголошення поля бітів виконується через таку синтаксичну конструкцію:

 

тип_поля ім’я_бітового_поля : розмір_поля;

 

де тип може бути тільки типом int з допоміжними специфікаторами unsigned i signed; ім’я бітового поля – звичайний ідентифікатор; розмір поля – ціле число, яке задає ширину поля в бітах. Доступ до поля здійснюється по імені. Адресу поля отримати не можна, в іншому поля бітів використовуються так само, як поля структур.

Виведемо на екран двійкове представлення числа, використовуючи поля бітів і маску.

 

#include <iostream>

using namespace std;

int main() {

union binary {

char value;

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;

};

binary t;

t.value = 15;

cout << t.byte.a7 << t.byte.a6 << t.byte.a5 << t.byte.a4;

cout << t.byte.a3 << t.byte.a2 << t.byte.a1 << t.byte.a0;

int a = 15, m = 1;

for ( m = 128; m; m >>= 1 )

if ( a & m ) cout << "1";

else cout << "0";

}

 

Використаємо поля бітів для простого шифрування – будемо міняти місцями три перші і три останні біта символу.

 

#include <iostream>

using namespace std;

int main() {

union code {

char value;

struct {

unsigned int lbt : 3;

unsigned int mbt : 2;

unsigned int hbt : 3;

};

};

code t1, t2;

const int N = 10;

char c1[ N ] = "Hello", c2[ N ] = "", c3[ N ] = "";

c1[ N - 1 ] = c2[ N - 1 ] = c3[ N - 1 ] = '\0';

// Шифруємо рядок символів

for ( int i = 0; i < N - 1; i++ ) {

t1.value = c1[ i ];

t2.lbt = t1.hbt;

t2.hbt = t1.lbt;

t2.mbt = t1.mbt;

c2[ i ] = t2.value;

}

// Дешифруємо рядок символів

for ( int i = 0; i < N - 1; i++ ) {

t1.value = c2[ i ];

t2.lbt = t1.hbt;

t2.hbt = t1.lbt;

t2.mbt = t1.mbt;

c3[ i ] = t2.value;

}

// Виводимо результат у вигляді рядків символів і

// в двійковому вигляді

cout << c1 << endl;

cout << c2 << endl;

cout << c3 << endl;

for ( int i = 0; i < N - 1; i++ ) {

for ( int m = 128; m; m >>= 1 )

if ( c1[ i ] & m ) cout << "1";

else cout << "0";

cout << " ";

}

cout << endl;

for ( int i = 0; i < N - 1; i++ ) {

for ( int m = 128; m; m >>= 1 )

if ( c2[ i ] & m ) cout << "1";

else cout << "0";

cout << " ";

}

cout << endl;

for ( int i = 0; i < N - 1; i++ ) {

for ( int m = 128; m; m >>= 1 )

if ( c3[ i ] & m ) cout << "1";

else cout << "0";

cout << " ";

}

}

 


<== попередня лекція | наступна лекція ==>
Об’єднання | Директиви препроцесора. Призначення директив препроцесора


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн