JavaRush/Курсы/Java Syntax Pro/Побитовые операции в Java

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

Открыта

1. Побитовый оператор AND

Когда-то мы говорили, что все данные хранятся в памяти в двоичной системе. Поэтому довольно давно программисты придумали много чего интересного для работы с двоичным представлением чисел. Например, в Java есть логические операторы, которые работают с битами чисел: AND (И), OR (ИЛИ), NOT (НЕ) и XOR (исключающее или).

a & b
Побитовый оператор AND (И)

Данный оператор очень похож на логический оператор AND (И), только обозначается не двумя амперсандами, а одним:

И применяется он не к числу в целом, а к его битам: число рассматривается как массив бит, и i-й бит числа-результата вычисляется на основе i-х бит каждого из двух чисел.

Первый бит результата будет вычисляться на основе первого бита числа a и первого бита числа b, второй бит — на основе второго бита числа a и второго бита числа b, и т.д.

Ну а оператор AND (И) означает, что «результирующий бит равен единице, только если бит числа a равен единице И бит числа b равен единице»:

1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0

Примеры:

Пример Результат
0b0011 & 0b1010
0b0010
0b1111 & 0b0000
0b0000
0b1010 & 0b0101
0b0000
0b1111 & 0b1010
0b1010

2. Побитовый оператор OR

Данный оператор очень похож на логический оператор OR (ИЛИ), только обозначается уже не двумя вертикальными линиями, а одной:

a | b

Также он применяется не к числу в целом, а к его битам: i-й бит числа-результата вычисляется на основе i-х бит каждого из двух чисел.

Побитовый OR (ИЛИ) означает, что «результирующий бит равен единице если бит числа a равен единице ИЛИ бит числа b равен единице»:

1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0

Примеры:

Пример Результат
0b0011 | 0b1010
0b1011
0b1110 | 0b0000
0b1110
0b1010 | 0b0101
0b1111
0b1111 | 0b1010
0b1111

Только когда биты обоих чисел (стоящие на одинаковых позициях) равны нулю, соответствующий бит результата равен нулю.



3. Побитовый оператор XOR (ИСКЛЮЧАЮЩЕЕ ИЛИ)

Оператор XOR, его еще называют исключающее или, обозначается символом ^. Чтобы ввести его на клавиатуре, нужно нажать shift+6 (в английской раскладке).

a ^ b

Данный оператор чем-то похож на оператор OR, (он даже называется похоже — XOR)

Побитовый XOR (ИСКЛЮЧАЮЩЕЕ ИЛИ) означает, что «результирующий бит равен единице, если бит числа a равен единице ИЛИ бит числа b равен единице, но не оба одновременно»:

1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0

Примеры:

Пример Результат
0b0011 ^ 0b1010
0b1001
0b1110 ^ 0b0000
0b1110
0b1010 ^ 0b0101
0b1111
0b1111 ^ 0b1010
0b0101

Только когда биты обоих чисел (стоящие на одинаковых позициях) разные, соответствующий бит результата равен единице. Если биты одинаковые, результирующий бит равен нулю.



4. Побитовый оператор NOT (НЕ, ОТРИЦАНИЕ)

Думаю, вы уже догадываетесь, что он означает. Данный оператор очень похож на логический оператор NOT (НЕ), только обозначается уже не восклицательным знаком, а тильдой:

~a

Этот оператор унарный: применяется не к двум числам, а к одному, перед которым и ставится.

Побитовый NOT означает, что «результирующий бит равен единице, если бит числа a равен нулю, и равен нулю, если бит числа a равен единице»:

~1 = 0
~0 = 1

Примеры:

Пример Результат
~0b0011
0b1100
~0b0000
0b1111
~0b0101
0b1010
~0b1111
0b0000

Данный оператор просто меняет бит 1 на 0 и 0 на 1.


Комментарии (465)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
AlexSa4kov
Уровень 11
2 декабря 2025, 17:39
Кто-то тоже решал методом перебора с комментариями?😓😓😓
Evgenii PetrovИнженер по автоматизации в ИП
25 октября 2025, 19:35
{Хотя ошибаюсь - в микроконтроллерах может применяться
Evgenii PetrovИнженер по автоматизации в ИП
25 октября 2025, 19:23
Всегда знал про флаги, но это ТАКАЯ УЗКАЯ НПРАВЛЕННОСТЬ - что караул, лет 20 я про не не слышал... Вообще... По-моему - она закончилась вмести с zx-spectrum 128
Evgenii PetrovИнженер по автоматизации в ИП
25 октября 2025, 18:50
Swap по-новому подсказка: То есть, если ты "замешал" два числа, ты можешь "вытащить" одно из них, снова применив XOR с другим.
Evgenii PetrovИнженер по автоматизации в ИП
25 октября 2025, 18:40
2 - 23564 Сложновата.... Раскладываем на 1 и 0 и смотрим, где И а где ИЛИ и что будет.
Evgenii PetrovИнженер по автоматизации в ИП
25 октября 2025, 18:29
1 задача 23168, а было 35 000
Grigoryvvv
Уровень 13
Expert
16 октября 2025, 17:23
16.10.2025 / 9 уровень
Yaroslav
Уровень 39
14 октября 2025, 21:19
Сперва я не понял, как решать swap. Пока не осознал, что, другими словами, x ^ y "замешивает" два числа в новое, совпавшие элементы которого, становятся нулями, а не совпавшие – единицами. Своего рода, химическая реакция. Тогда, если замешать с получившейся "смесью" изначальный x, то опять несовпавшие части поменяются, а совпавшие станут нулями, получится противоположная часть "смеси" – y.
Aidar Mukushev
Уровень 5
22 сентября 2025, 05:09
в теме 3. Побитовый оператор XOR (ИСКЛЮЧАЮЩЕЕ ИЛИ) первый пример 0b0011 ^ 0b1010 = 0b1001 я думаю ошибочно отметили в 0b0011, нужно чтобы был 0b0011, так как 0 xor 0 = 0 (не имеет смысла подчеркивать), а 0 xor 1 = 1.
flexy
Уровень 10
24 августа 2025, 19:01
В задаче про обмен фишка в том, что если к числу два раза подряд применить операцию XOR, то получится это же число. Такое решение прокает: x = x ^ y; y = x ^ y; // y = x ^ y ^ y = x x = x ^ y; // x = x ^ y ^ x = y