Главная страница
Навигация по странице:

  • Результаты битовых операций

  • Например

  • Лекции Булатицкий Дмитрий Иванович (во многом по материалам Прасолова А. Н.)


    Скачать 319.62 Kb.
    НазваниеЛекции Булатицкий Дмитрий Иванович (во многом по материалам Прасолова А. Н.)
    Дата11.01.2022
    Размер319.62 Kb.
    Формат файлаdocx
    Имя файлаLecture_Programming_2021_09_01.docx
    ТипЛекции
    #328427
    страница9 из 36
    1   ...   5   6   7   8   9   10   11   12   ...   36

    Битовые операции


    Любые данные, записанные в память ЭВМ, как известно, представляют собой последовательность бит, т.е. последовательность нулей и единиц. Например, любое число типа int будет занимать 2 байта в памяти, т.е 16 бит. Его можно рассматривать двояко: либо как целое число ( так и делается при выполнении операций *,/, +, - , % ), либо как последовательность бит, что возможно при использовании битовых операций.

    Битовые операции выполняются независимо над каждым битом данных. Если операция двуместная, то она выполняется над соответствующими битами операндов.

    В Си имеются следующие битовые операции:
    битовое отрицание (одноместная),

    & побитовое "и" (двуместная),

    ^ побитовое "исключающие или" (двуместная),

    | побитовое "или" (двуместная).
    Результат этих операций определяет таблица значений для всевозможных комбинаций бит двух операндов.

    Результаты битовых операций

    op1

    op2

    op1

    op1 & op2

    op1 ^ op2

    op1 | op2

    0

    0

    1

    0

    0

    0

    0

    1

    1

    0

    1

    1

    1

    0

    0

    0

    1

    1

    1

    1

    0

    1

    0

    1


    Рассмотрим несколько примеров.

    Первый пример показывает, как с помощью операции | можно установить в единицу выбранные биты операнда:
    /* a = 00001001 = 9 */

    char a, b; /* 00011010 = 26 */

    a = 9; /* -------- */

    b = a | 26 /* b = 31 */ /* b = 00011011 = 31 */
    Следующий пример показывает, как с помощью операции & можно обнулить старшую часть байта:
    char a, b; /* a = 00101101 = 45 */

    a = 45; /* 00001111 */

    b = a & 0x0F; /* -------- */

    /* b = 00001101 = 13 */
    К битовым операциям относятся операции сдвига << и >> :
    a << b сдвиг битов переменной a влево на b позиций,

    a >> b сдвиг битов переменной a вправо на b позиций.
    Например:
    char a, b;

    a = 26; /* a = 00011010 = 26 */

    b = a << 2; /* b = 01101000 = 104 */
    Сдвиг влево равносилен умножению на 2 в соответствующей степени. Сдвиг вправо - делению на 2 в соответствующей степени.

    Все битовые операции выполняются слева направо. В следующей строке приведены битовые операции в порядке уменьшения их приоритета.
    , << >>, &, ^, |
    Для двуместных битовых операций определены дополнительные операции присваивания:
    a <<= b; эквивалентно a = a << b,

    a >>= b; эквивалентно a = a >> b,

    a &= b; эквивалентно a = a & b,

    a ^= b; эквивалентно a = a ^ b,

    a |= b; эквивалентно a = a | b.
      1. Операции отношения


    Представляют собой двуместные операции, предназначенные для сравнения операндов. В языке Си имеются шесть операций отношения:
    > больше,

    < меньше,

    >= больше или равно,

    <= меньше или равно,

    == равно,

    != не равно.
    Действие операций отношения заключается в сравнении первого и второго операнда. Если операнды не удовлетворяют условию отношения, то результат операции равен нулю, т.е. условие ложно. Если операнды удовлетворяют условию отношения, то результат отношения не равен нулю, т.е. условие истинно.

    Например:
    int a,b;

    a = 5;

    b = ( a + 5 <= 4 ); /* b = 0 */
    Из сказанного выше следует, что в языке Cи отсутствует специальный логический тип данных. Его заменяет целый тип, причем логическому понятию "ложно" соответствует значение 0, а логическому понятию "истина" - любое отличное от 0 целое число.

    Операции отношения выполняются слева направо. При нечетком понимании их действия возможно получение, вообще говоря, неверного результата. Например, с точки зрения синтаксиса языка Си выражение a
    Чтобы это выражение соответствовало математическому смыслу, его нужно разбить на две части a < x и x < b и связать его логической операцией && ("и"), т.е. (a < x) && (x < b). Такая запись читается так : если a меньше x и x меньше b, то результат - истина.
      1. 1   ...   5   6   7   8   9   10   11   12   ...   36


    написать администратору сайта