Skip to main content
LibreTexts - Ukrayinska

4.4: Побітові операції

  • Page ID
    29729
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)

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

    Таблиця\(\PageIndex{1}\): Побітові оператори.
    & І
    | АБО
    ^ XOR
    ~ Доповнення
    >> Зсув вправо
    << Зсув вліво

    Зверніть увагу на подвійне використання & для «адреси» і тепер І. Унарна операція завжди є «адресою», а двійкова операція завжди І, тому a & b не буде означати адресу b. Якщо ви хочете, щоб І x з y, зрушити результат на 2 місця вліво і призначити результат z, ви б використали:

    z = (x&y)<<2;

    Давайте розглянемо кілька прикладів. Припустимо, змінні X, Y і Z є незнаковим символом s X і Y встановлені на 13 і 134 відповідно. У шістнадцятковому, це 0x0d і 0x86 для бітових шаблонів 00001101 і 10000110.

    Z = X<<3;    // Z is 01101000 or 0x68
    Z = X>>1;    // Z is 00000110 or 0x06
    Z = ~X;      // Z is 11110010 or 0xf2
    Z = X|Y;     // Z is 10001111 or 0x8f
    Z = X&Y;     // Z is 00000100 or 0x04
    Z = X^Y;     // Z is 10001011 or 0x8b