Побитовые операции — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Новая страница: «'''ВНИМАНИЕ, СТАТЬЯ НАХОДИТСЯ В РАЗРАБОТКЕ''' '''Побитовые операции''' — операции, производ...»)
 
(Применение для решения задач)
Строка 58: Строка 58:
  
 
==Применение для решения задач==
 
==Применение для решения задач==
 +
*'''''Проверка на то, является ли число степенью двойки:'''''<br/>Если выражение <tex>(x\ \&\ (x - 1))</tex> равно нулю, то число <tex>x</tex> является степенью двойки <tex>(x \not= 0)</tex>.
 +
*'''''Проверка на то, что в битовой записи числа нет двух единиц, идущих подряд:'''''<br/>Если выражение <tex>(x\ \&\ (x \ll 1))</tex> равно нулю, то в битовой записи числа <tex>x</tex> нет двух единиц, идущих подряд.
 +
*'''''Номер младшего единичного бита:'''''<br/>Число, полученное в результате операции <tex>x\ \&\ (\sim x + 1)</tex> будет равно номеру младшего единичного бита в числе <tex>x</tex>.
  
 
==Источники информации==
 
==Источники информации==
 
[http://www.c-cpp.ru/books/bitovye-operatory| Онлайн справочник программиста на С и С++]
 
[http://www.c-cpp.ru/books/bitovye-operatory| Онлайн справочник программиста на С и С++]

Версия 00:04, 6 марта 2016

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

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

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

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

Битовые операторы И [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].

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

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