Побитовые операции

Материал из Викиконспекты
Версия от 00:04, 6 марта 2016; Penguinni (обсуждение | вклад) (Применение для решения задач)
Перейти к: навигация, поиск

ВНИМАНИЕ, СТАТЬЯ НАХОДИТСЯ В РАЗРАБОТКЕ

Побитовые операции — операции, производимые над цепочками битов. Выделяют два типа побитовых операций: логические операции и побитовые сдвиги.

Принцип работы

Логические побитовые операции

Битовые операторы И [math](AND, \&)[/math], ИЛИ [math](OR, \mid)[/math], НЕ [math](NOT, \sim)[/math] и исключающее ИЛИ [math](XOR,[/math] ^[math])[/math] используют те же таблицы истинности, что и их логические эквиваленты.

Побитовое И

Побитовое И используется для выключения битов. Любой бит, установленный в [math]0[/math], вызывает установку соответствующего бита результата также в [math]0[/math].

&
11001010
11100010
11000010

Побитовое ИЛИ

Побитовое ИЛИ используется для включения битов. Любой бит, установленный в [math]1[/math], вызывает установку соответствующего бита результата также в [math]1[/math].

|
11001010
11100010
11101010

Побитовое НЕ

Побитовое НЕ инвертирует состояние каждого бита исходной переменной.

~
11001010
00110101

Побитовое исключающее ИЛИ

Исключающее ИЛИ устанавливает значение бита результата в [math]1[/math], если значения в соответствующих битах исходных переменных различны.

^
11001010
11100010
00101000

Побитовые сдвиги

Операторы сдвига [math]\ll[/math] и [math]\gg[/math] сдвигают биты в переменной влево или вправо на указанное число. На освободившиеся позиции помещаются нули, или, в случае сдвига вправо отрицательного числа, единицы (поддерживается знаковый бит). Сдвиг влево может применяться для умножения числа на два, сдвиг вправо — для деления.

x = 7; //00000111

x << 1; //00001110

x << 5; //11000000

x >> 2; //00110000

Применение для решения задач

  • Проверка на то, является ли число степенью двойки:
    Если выражение [math](x\ \&\ (x - 1))[/math] равно нулю, то число [math]x[/math] является степенью двойки [math](x \not= 0)[/math].
  • Проверка на то, что в битовой записи числа нет двух единиц, идущих подряд:
    Если выражение [math](x\ \&\ (x \ll 1))[/math] равно нулю, то в битовой записи числа [math]x[/math] нет двух единиц, идущих подряд.
  • Номер младшего единичного бита:
    Число, полученное в результате операции [math]x\ \&\ (\sim x + 1)[/math] будет равно номеру младшего единичного бита в числе [math]x[/math].

Источники информации

Онлайн справочник программиста на С и С++