АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Побітові (порозрядні) операції

Читайте также:
  1. Банківські операції
  2. БАНКІВСЬКІ ОПЕРАЦІЇ
  3. Валютні операції.
  4. Виконання завдань під час стабілізаційних, специфічних дій військ та у спеціальній операції
  5. Вказати, яка із бухгалтерських проводок відповідає здійсненій операції.
  6. Головним напрямком розвитку МПП стало розширення міжнародної спеціалізації і кооперації виробництва.
  7. Депозитні та вкладні операції
  8. Дисципліна «БАНКІВСЬКІ ОПЕРАЦІЇ»
  9. Економічне обґрунтування кооперації
  10. З яких українських земель було депортовано українців під час операції «Вісла»?
  11. Засоби і методи обробк операційного поля. Підготовка рук до операції
  12. Зовнішньоекономічні операції щодо давальницької сировини та товарообміну

Поля бітів

Бітові поля (bit fields) - особливий вид полів структури. Вони дають можливість задавати кількість бітів, в яких зберігаються елементи цілих типів. Бітові поля дозволяють раціонально використовувати пам'ять за допомогою зберігання даних в мінімально потрібній кількості бітів.
При оголошенні бітового поля вслід за типом елемента ставиться двокрапка (:) і вказується цілочисельна константа, яка задає розмір поля (кількість бітів). Розмір поля повинен бути константою в діапазоні між 0 і заданим загальним числом бітів, яке використовується для зберігання даного типу даних.


struct bit_field {
int bit_0: 1;
int bits_1_to_4: 4;
int bit_5: 1;
int bits_6_to_15: 10;
} bit_var;

 

Приклад. struct { int a: 1; unsigned b: 2; int: 1; unsigned d: 3; } flags;   Довжина поля бітів дорівнює числу кратному розміру типу int (2б). Для поля бітів можемо звертатися, як до елемента структури flags.a, flags.b і працювати, як з звичайним цілим беззнаковим числом.   flags.a=0; flags.c=1; (присвоєння) flags.a==0; (порівняння).  

Робота з полями бітів залежить від конкретної ЕОМ і реалізації транслятора.

Приклад: struct polebit

{

unsigned i:2;

unsigned j:6;

int:3; // без імені;

unsigned k:3;

unsigned l:2;

} mypole;

 

Побітові (порозрядні) операції

Є шість операцій для бітів, їх можна застосувати лише для типів char, int, long, знакових і беззнакових.

 

& - порозрядне І

| - порозрядне АБО

^ - порозрядне додавання по модулю 2

~ - порозрядне заперечення

<< - зсув вліво

>> - зсув вправо

n=n & 0177 (зануляє всі розряди крім молодших семи);

n=n | 0001 (встановлює в 1 молодший біт);

n=n<<2 (зсуває біти вліво на 2 позиції, біти; які звільнилися заповнюються нулями);

n=n>>2 (зсув вправо для без знакових; біти, які звільняться заповнюються нулями, для знакових – заповнюються знаком. Але це залежить від реалізації. Можливі варіанти).

 

123 ~ 1111011 123 | 321 = 379 123 & 321 = 65

321 ~ 101000001 123<<5=3936 123>>1=61

 

Приклад використання порозрядних операцій: вивід бітового представлення числа

 

void show_bit(unsigned j)

{

int i;

for (i=15; i>=0; i--)

//операція зсуву має більший пріоритет, ніж &

printf(“ %d ”,j>> i & 1);

}

 

main()

{ int value;

show_bit(25);

show_bit(12);

printf(“Вв.число \n”);

scanf(“%d”, &value)

if (value>=0) show_bit(value)

}

 

 


Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)