Побитовые операции — различия между версиями
Penguinni (обсуждение | вклад) (Новая страница: «'''ВНИМАНИЕ, СТАТЬЯ НАХОДИТСЯ В РАЗРАБОТКЕ''' '''Побитовые операции''' — операции, производ...») |
Penguinni (обсуждение | вклад) (→Применение для решения задач) |
||
Строка 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
ВНИМАНИЕ, СТАТЬЯ НАХОДИТСЯ В РАЗРАБОТКЕ
Побитовые операции — операции, производимые над цепочками битов. Выделяют два типа побитовых операций: логические операции и побитовые сдвиги.
Содержание
Принцип работы
Логические побитовые операции
Битовые операторы И
, ИЛИ , НЕ и исключающее ИЛИ ^ используют те же таблицы истинности, что и их логические эквиваленты.Побитовое И
Побитовое И используется для выключения битов. Любой бит, установленный в
, вызывает установку соответствующего бита результата также в .& | |
---|---|
11001010 11100010 | |
11000010 |
Побитовое ИЛИ
Побитовое ИЛИ используется для включения битов. Любой бит, установленный в
, вызывает установку соответствующего бита результата также в .| | |
---|---|
11001010 11100010 | |
11101010 |
Побитовое НЕ
Побитовое НЕ инвертирует состояние каждого бита исходной переменной.
~ | |
---|---|
11001010 | |
00110101 |
Побитовое исключающее ИЛИ
Исключающее ИЛИ устанавливает значение бита результата в
, если значения в соответствующих битах исходных переменных различны.^ | |
---|---|
11001010 11100010 | |
00101000 |
Побитовые сдвиги
Операторы сдвига
и сдвигают биты в переменной влево или вправо на указанное число. На освободившиеся позиции помещаются нули, или, в случае сдвига вправо отрицательного числа, единицы (поддерживается знаковый бит). Сдвиг влево может применяться для умножения числа на два, сдвиг вправо — для деления.
x = 7; //00000111
x << 1; //00001110
x << 5; //11000000
x >> 2; //00110000
Применение для решения задач
- Проверка на то, является ли число степенью двойки:
Если выражение равно нулю, то число является степенью двойки . - Проверка на то, что в битовой записи числа нет двух единиц, идущих подряд:
Если выражение равно нулю, то в битовой записи числа нет двух единиц, идущих подряд. - Номер младшего единичного бита:
Число, полученное в результате операции будет равно номеру младшего единичного бита в числе .