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

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

Java Syntax Pro
8 уровень , 4 лекция
Открыта

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