Изменения

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

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

Нет изменений в размере, 22:59, 20 марта 2016
Нет описания правки
power <<= 1
result = x - (x >> 1)
</code>
 
====Циклический сдвиг влево====
Пусть дано число <tex>x</tex> и надо совершить циклический сдвиг его битов влево.
Желаемый результат можно получить, если объединить числа, полученные при выполнении обычного битового сдвига влево на необходимую величину и вправо на разность между разрядностью числа и величиной сдвига. Таким образом, мы сможем поменять местами начальную и конечную части числа.
 
<code>
'''int''' head, tail
head = x << a <font color = green>// x {{---}} изменяемое число
// a {{---}} число позиций, на которое хотим выполнить сдвиг</font>
'''if''' a != 0:
tail = x >> (n - a) <font color = green>// n {{---}} разрядность числа x</font>
'''else''':
tail = 0
result = head | tail
</code>
Таким образом, мы получили код, приведенный в начале раздела.
 
====Циклический сдвиг влево====
Пусть дано число <tex>x</tex> и надо совершить циклический сдвиг его битов влево.
Желаемый результат можно получить, если объединить числа, полученные при выполнении обычного битового сдвига влево на необходимую величину и вправо на разность между разрядностью числа и величиной сдвига. Таким образом, мы сможем поменять местами начальную и конечную части числа.
 
<code>
'''int''' head, tail
head = x << a <font color = green>// x {{---}} изменяемое число
// a {{---}} число позиций, на которое хотим выполнить сдвиг</font>
'''if''' a != 0:
tail = x >> (n - a) <font color = green>// n {{---}} разрядность числа x</font>
'''else''':
tail = 0
result = head | tail
</code>
====Разворот битов====
276
правок

Навигация