JLesson 7. Побитовые операторы.

Побитовые операторы, как можно догадаться из названия, позволяют работать с отдельными битами. На практике эта возможность далеко не всегда востребована, но может быть полезна. Если хотите знать зачем, Добро Пожаловать под кат.

Рассмотрим существующие логические побитовые операторы в Java. К ним относятся операторы, соответствующие основным логическим операциям, а именно:

— OR (|)

— AND (&)

— NOT (~)

— XOR  (^)

Результат работы этих операторов определяется путем применения данных операций к каждой паре битов на одинаковых позициях в битовой последовательности.

Оператор NOT(~) просто инвертирует все биты операнда.

Например, значение операции AND (&) в результате превратит бит в 1 только в случае одновременной истинности двух битов операндов, к которым применяется данный оператор. (x & y):

0000 1010 (10)

0000 0100 (4)

——————-

0000 0000 (0)

Значение операции OR (|)  превратит бит в 1, если хотя бы один из двух битов равен 1:

0000 1010 (10)

0000 0100 (4)

———————-
0000 1110 (14)

Теперь воспользуемся операцией XOR(или x ^ y в языке Java):

0000 1010 (10)

0000 0100 (4)

——————-

0000 1110   (14)

Давайте проверим на практике. Создайте новый проект, назовите его BitOps(или как-то иначе) и экспериментируйте. По очереди применим все перечисленные выше операции к двум целочисленным переменным:

Побитовые операторы часто применяются для оптимизации, о методах которой вы можете узнать из книги Г.Уоррена «Алгоритмические трюки для программистов».

Следующими операторами, которые мы рассмотрим, буду операторы побитового сдвига.

>> сдвиг вправо

<< сдвиг влево

>>> беззнаковый сдвиг вправо с заполнением нулями

Пример.

Тем самым мы получим результат 8. В итоге мы умножили наше число на 2! Интересно? Давайте попробуем таким образом разделить?

Ответом будет 2 и все правильно! Оператор >>> осуществляет сдвиг без учета знака. Так данный метод используется в реализации метода Arrays.binarySearch() из пакета java.util для вычисления индекса среднего элемента в массиве:

Конечно, это пример положительной оптимизации, и такие трюки часто применяются в вычислительной технике. Однако, разрабатывая крупный корпоративный продукт, во главу угла должна ставиться вовсе не оптимизация и зачастую лучше отступиться от поиска способов ее проведения (тем более, если не знаете всех тонкостей наверня-ка) ради удобочитаемости кода и его успешной поддержки в дальнейшем.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *