Изменения

Перейти к: навигация, поиск

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

770 байт добавлено, 22:45, 20 марта 2016
Разворот битов
====Разворот битов====
Чтобы получить биты числа <tex>x</tex>, записанные в обратном порядке, будем снимать значение младшего бита, умножать его на старшую незаписанную степень двойки и сдвигать число вправо на единицу для обработки следующих битприменим следующий алгоритм
<code>
result <font color = 0green>// Пример приведен для 16-ти битных чисел. // Для чисел других разрядностей нужны соответствующие константы.</font> position x = 1 ((x & 0x5555) << 1) | ((n - x >>> 1) & 0x5555) <font color = green>// n {{---}} разрядность числа xЧетные и нечетные биты поменялись местами.</font> '''while''' x != 0:((x & 0x3333) << 2) | ((x >>> 2) & 0x3333) <font color = green>// Биты "перетасовываются" группами по два.</font> result + x = ((x & 10x0f0f) << 4) * position position | ((x >>>4) & 0x0f0f) <font color = 1green>// Биты "перетасовываются" группами по четыре.</font> x = ((x & 0x00ff) << 8) | ((x >>> 8) & 0x00ff) <font color = 1green>// Биты "перетасовываются" группами по восемь.</font>
</code>
 
Более подробно про то, что за константы выбраны для данного алгоритма, можно прочитать в разделе [[Побитовые_операции#Подсчет_количества_единичных_битов | Подсчет количества единичных битов]].
===Применение для решения задач===
276
правок

Навигация