русс | укр

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

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


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


Порозрядні операції


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


Порозрядні операції (їх ще називають побітовими чи просто бітовими) виконуються тільки над операндами цілих типів. До них належать (згідно з порядком старшинства операції):

1) ~ (побітова інверсія, унарна операція);

2) << (зсування вліво), >> (всування вправо);

3) & (побітове AND);

4) ^ (побітове XOR);

5) | (побітове OR).

Використання порозрядних операцій дає змогу оперувати окремими бітами даних, перевіряти або змінювати їх значення, що наближає програмування мовою С++ до можливостей асемблера.

Порозрядні операції виконуються окремо над кожною парою бітів, що записані в однакових за номером розрядах двох операндів, які вступають в порозрядну операцію. Таблиця істинності порозрядних операцій наведена в табл. 4.2.

 

Таблиця 4.2. Таблиця істинності порозрядних операцій

Розряди Результат операції
ai bi AND XOR OR

 

Операцію & називають накладанням маски, оскільки вона дає змогу виділити потрібні розряди цілочислового операнда. Наприклад, необхідно визначити значення першого біту числа. В масці в першому біті записуємо одиницю, в інших бітах – нуль. При виконанні операції & значення першого біту буде збережено, значення всіх інших – замінені на нуль.

Операцію | можна використовувати для встановлення одиниці в потрібних розрядах числових даних. Для цього в масці встановлюємо одиницю в позиціях, де її необхідно встановити, і нулі в позиціях, значення в яких необхідно залишити незмінними.

Операції << i >> зсувають усі розряди цілочислового операнда, заданого зліва від знака операції, на кількість бітів, вказану справа від знака операції.

У разі зсування вліво старші біти, які виходять за межі розрядної сітки числа, втрачаються, а на місце молодших бітів, що звільняються після зсування, заносять нулі. При зсуванні вправо втрачаються молодші розряди числа, які зсуваються за межі розрядної сітки. Заповнення звільнених старших розрядів залежить від типу даного: якщо операнд без знаковий (оголошений з модифікатором unsigned), то вільні старші розряди заповнюються нулями. Якщо праворуч зсувається знакове число, то для заповнення вільних розрядів використовується біт знака.

Проілюструємо використання побітових операцій такою програмою:

 

#include <iostream>

using namespace std;

 

void print_bin(unsigned char x) {

unsigned char mask = 1 << 7;

while (mask) {

cout << (x & mask ? 1 : 0);

mask >>= 1;

}

cout << endl;

}

 

int main(){

unsigned char a = 240;

unsigned char b = 170;

cout << "a "; print_bin(a); // 11110000

cout << "b "; print_bin(b); // 10101010

cout << "a & b "; print_bin(a & b); // 10100000

cout << "a | b "; print_bin(a | b); // 11111010

cout << "a ^ b "; print_bin(a ^ b); // 01011010

cout << "~a "; print_bin(~a); // 00001111

}

 


<== попередня лекція | наступна лекція ==>
Порядок виконання операцій | Операції порівняння


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