Изменения

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

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

73 байта добавлено, 01:06, 7 марта 2016
Нет описания правки
===Побитовые сдвиги===
Операторы сдвига <tex>\lltexttt{<<}</tex> и <tex>\ggtexttt{>>}</tex> сдвигают биты в переменной влево или вправо на указанное число. При этом на освободившиеся позиции устанавливаются нули (кроме сдвига вправо отрицательного числа, в этом случае на свободные позиции устанавливаются единицы, так как поддерживается знаковый бит).
Сдвиг влево может применяться для умножения числа на два, сдвиг вправо — для деления.
</code>
В языке программирования Java существует также оператор беззнакового битового сдвига вправо <tex>\gggtexttt{>>>}</tex>. При использовании этого оператора на освободившиеся позиции всегда устанавливаются нули.
====Ограничения====
===Проверка на то, является ли число степенью двойки===
<code>
answer = x && !'''and''' '''not'''(x & (x - 1)) <font color = green>// если answer == 1, то число x является степенью двойки</font>
</code>
===Работа с битовыми масками===
Для работы с подмножествами удобно использовать битовые маски. Применяя побитовые операции легко сделать следующее: найти дополнение <tex>(\sim mask)</tex>, пересечение <tex>(mask_1\ \&\ mask_2)</tex>, объединение <tex>(mask_1 \mid mask_2)</tex> множеств, установить бит по номеру <tex>(mask \mid (1 \ll \texttt{<<}\ x))</tex>, снять бит по номеру <tex>(mask\ \&\ \sim(1 \ll \texttt{<<}\ x))</tex>.
===Определение знака числа===
Поскольку при сдвиге вправо на освобождающиеся позиции устанавливается бит знака, знак числа можно определить следующим образом:
bkey = key.''getBytes''
'''for''' i = 0 .. btxt.''length''- 1: result[i] = (btxt[i] <tex>\oplus</tex> bkey[i % bkey.''length'']) '''as''' '''byte'''
'''return''' result
bkey = key.''getBytes''
'''for''' i = 0 .. secret.''length''- 1: result[i] = (secret[i] <tex>\oplus</tex> bkey[i % bkey.''length'']) '''as''' '''byte'''
'''return''' result '''as''' '''string'''
</code>
276
правок

Навигация