Побітові операції. Програмування на C та C++

682 0 Новини високих технологій

Побітові операції — це операції, використовувані для виконання маніпуляцій над бітовими шаблонами або двійковими числами, які включають в себе роботу з окремими бітами. Це швидке, просте дію, безпосередньо підтримуване процесором, використовується для керування значеннями для порівнянь і обчислень.

Основа обчислень

Двійкова цифрова система використовує лише дві цифри — 0 і 1. Комп'ютери працюють у двійковому форматі, що означає, що вони зберігають дані і виконують обчислення, використовуючи тільки нулі і одиниці.
Побітові операції. Програмування на C та C++



Хоча одна бінарна цифра може використовуватися для подання True (1) (істина) або False (0) (брехня) в логіці, для зберігання великих чисел і виконання складних функцій можна використовувати кілька двійкових цифр. Фактично будь-яке число може бути представлено у двійковому форматі.

Застосування

Побітові оператори використовуються в наступних областях:
  • Комунікаційні стеки, де окремі біти в заголовку, прикріплені до даних, несуть важливу інформацію.
  • Вбудоване програмне забезпечення для управління різними функціями в чіпі та індикації стану апаратного забезпечення шляхом управління окремими бітами апаратних регістрів вбудованих мікроконтролерів.
  • Низькорівневе програмування для таких додатків, як драйвери пристроїв, криптографічне програмне забезпечення, ПЗ для декодування відео, розподільники пам'яті, програмне забезпечення для стиснення і графіки.
  • Зручне ведення великих наборів цілих чисел в задачах пошуку та оптимізації.
  • Побітові операції, виконувані з бітовими прапорами, які можуть включати екземпляр типу перерахування для зберігання будь-якої комбінації значень, визначених у списку перечислителей.
  • Побітові операції. Програмування на C та C++

    Побітові операції — як це працює?

    На відміну від звичайних логічних операторів (наприклад, +, -, *), які працюють з байтами або групами байтів, побітові оператори можуть перевіряти або встановлювати кожен з окремих бітів в байті. Побітові операції ніколи не викликають переповнення в комірках пам'яті, тому що результат, отриманий після виконання операції знаходиться в межах діапазону можливих значень для числового типу.


    Побітові оператори, які використовуються в сімействі мов C (C #, C та C ++):
  • OR (|) — результат є істиною, якщо один з операндів правдивий.
  • AND (&) — результат вірний, тільки якщо обидва операнди вірні. Його можна використовувати для налаштування маски перевірки значень певних бітів.
  • XOR (^) — результат є істиною, тільки якщо один з його операндів правдивий. Він використовується, в основному, для перемикання певних біт. Він також допомагає замінювати дві змінні без використання третьою.
  • NOT (~) — побітове доповнення або інверсія. Надає порозрядне додаток до операнду шляхом інвертування його значення, так що всі нулі перетворюються в одиниці, а всі одиниці перетворюються в нулі.
  • (Right-Shift) і (Left-Shift) — оператор, який переміщує біти в число позицій, заданих другим операндом в правому або лівому напрямку. Оператори зсуву використовуються для вирівнювання бітів.
  • Побітові операції. Програмування на C та C++

    Приклад роботи

    Побітові оператори — це символи, що представляють дії, які повинні виконуватися для окремих бітів. Побітова операція працює на двухбитовых шаблонах однакової довжини, позиціонуючи їх окремі біти: Логічна операція AND (&) кожній бітовій пари призводить до 1 (істині), якщо перший і другий біти дорівнюють 1. В інакше результат дорівнює нулю. Серед інших застосувань AND може використовуватися для перевірки окремих бітів в бітової рядку, щоб побачити, чи є вони хибним або істинним значенням. Розглянемо детальніше на прикладі: IsOdd = (ValueToTest & 1)! = 0. Логічна операція АБО (|) кожній бітовій пари призводить до 1 якщо перший або другий біт дорівнює 1. В іншому випадку результат дорівнює нулю. Логічна операція XOR (~) кожній бітовій пари призводить до 1 якщо два біта різні, і 0 якщо вони однакові. Логічний оператор NOT представлений як ^. Лівий shift (), правий зсув) і правий зсув нульовою заливки (>) іноді згадуються як побітові оператори і називаються операторами зсуву біт.
    Побітові операції. Програмування на C та C++

    Пріоритезація

    Порядок пріоритетності (від найвищого до найнижчого) двійковими операторів при програмуванні на C:
  • NOT;
  • Right-Shift Left-Shift);
  • AND;
  • XOR;
  • OR.
  • Дані операнди використовуються в більшості мов програмування. Наприклад, при написанні коду javascript побітові операції тими ж, що й вище перераховані. Це викликано базовими математичними основами, на яких базується програмний код. Зокрема, побітові операції в Java, в свою чергу, повністю тотожні javascript.

    Біт та програмування на C і інших мовах

    Біт є найменшою одиницею виміру, що використовується для кількісної оцінки комп'ютерних даних. Він містить одне двійкове значення — 0 або 1.
    Хоча один біт може визначати логічне значення True (1) або False (0), як окрема одиниця він використовується рідко. Тому в комп'ютерному сховище біти часто групуються в 8-бітні кластери, які називаються байтами. Оскільки байт містить вісім біт, кожний з яких має два можливих значення, двійковими операціях в Сі (мова програмування) один байт може мати 28 або 256 різних значень.
    Побітові операції. Програмування на C та C++

    Терміни «біти» і «байт» часто плутаються і навіть використовуються як взаємозамінні, оскільки звучать однаково і обидва скорочуються літерою «Б». Однак при правильному написанні біти скорочуються в нижньому регістрі «b», а байти скорочуються у верхньому регістрі — «B». Важливо не плутати ці два терміна, так як будь-яке вимірювання в байтах містить у вісім разів більше біт. Наприклад, невеликий текстовий файл розміром 4 КБ містить 4000 байтів або 32000 біт.
    Як правило, файли, пристрої зберігання і ємність сховища вимірюються у байтах, а швидкості передачі даних вимірюється в бітах. Наприклад, карта пам'яті SSD може мати ємність 240 ГБ, тоді як завантаження може переноситися зі швидкістю 10 Мбіт/с. Крім того, біти також використовуються для опису архітектури процесора, такий як 32-розрядний або 64-розрядний процесор.

    Побітові операції в паскалі

    Побітове рівень операцій в паскалі включає в себе роботу з окремими бітами, які є найменшими одиницями даних на комп'ютері. Хоча комп'ютери здатні маніпулювати бітами, вони зазвичай зберігають дані і виконують інструкції в бітових кратних значень, які називаються байтами. Більшість мов програмування, в тому числі побітові операції в Delphi, керують групами з 816 або 32 біт.

    Опис процесу

    Поразрядный оператор — це символ, який представляє дію, яке працює з даними на рівні біт, а не з байтами або великими одиницями даних, як це частіше зустрічається.
    Побітові операції. Програмування на C та C++
    Більшість звичайних операторів працюють з одним або декількома байтами, які в більшості систем містять вісім біт. Оскільки вони забезпечують більшу точність і вимагають меншої кількості ресурсів, побітові оператори можуть зробити код більш швидким і ефективним. Приклади використання побітових операцій включають:
  • шифрування;
  • стиск;
  • графіку;
  • зв'язок з портів/сокетам;
  • програмування вбудованих систем;
  • машини з кінцевим станом.
  • Побітове оператор працює з двійковим поданням числа, а не з його значенням. Операнд розглядається як набір біт, а не як один номер. Побітові оператори аналогічні в більшості підтримують їх мов — C, Java, javascript, Python і Visual Basic.

    Чому це важливо використовувати?

    Побітові операції абсолютно необхідні при програмуванні апаратних регістрів у вбудованих системах. Кожен процесор має один або кілька регістрів (зазвичай певний адреса пам'яті), які контролюють, включено чи переривання або вимкнуто. Щоб дозволити переривання запускати звичайний процес, необхідно встановити біт дозволу для цього типу переривання, а головне, не змінювати ні один з інших бітів у регістрі.
    Побітові операції. Програмування на C та C++
    Коли переривання спрацьовує, воно зазвичай встановлює біт в регістрі стану, так що одна службова процедура може визначати точну причину переривання. Тестування окремих бітів дозволяє швидко декодувати джерело переривань.
    У багатьох вбудованих системах загальна доступна оперативна пам'ять може бути 64128 або 256 байт. У цьому середовищі зазвичай використовується один байт для зберігання декількох елементів даних і бульових прапорів, а потім використовуються бітові операції для установки і читання їх.