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.


Комментарии (470)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
15 июня 2026
тут не хватает обьяснения тому, что каждое число является последовательностью 0 и 1 и, что бы привести число допустим 5 (что в двоичной системе счисления будет 0101) к этой последовательности, нужно представлять степени двойки, но идущей от единицы т.е. 0001 = 1 0010 = 2 0011 = 3 0100 = 4 0101 = 5 вычисление идет справа на лево перед последующим объяснением приведу, возможно, не совсем правильную аналогию, но 0 это выключенное состояние, а 1 это включенное состояние по этому что бы получить число 1 нам надо включить самый правый бит, от чего мы получаем 0001 что бы получить число 2 нам надо включить второй бит, от правого края 0010 что бы получить число 3, что нам нужно сделать? третий бит справа на лево при включении дает 4, а значит нам надо включить два бита так, что бы получилась сумма нужного нам числа, по этому мы включим бит со значением 2 и 1 двойка у нас 0010 а единица 0001, по этому код значения 3 будет равен 0011 значение 4 получить, как написано чуть выше, легче, тут просто надо включить бит третий с права, и получаем 0100 а что бы получить значение 5 мы должны опять использовать суммирование, а именно суммировать из 4 и 1, 4 = 0100 а 1 = 0001, итог 5 = 0101; вот вам неполная последовательность, только для примерного понимания 0001 = 1 0010 = 2 0100 = 4 1000 = 8 10000 = 16 100000 = 32 1000000 = 64 10000000 = 128 100000000 = 256 и вот из этого вы и должны собирать числа 1 = 0001 2 = 0010 3 = 0011 7 = 0111 9 = 1001 15 = 1111 а задача с xor получится решить только тогда, когда вы будете воспринимать числа не как числа, а как состояние 0 и 1, и то даже с пониманием этого, тяжело будет дойти до логической связи, почему вот это:

    public void swap() {
        x = x^y;
        y = x^y;
        x = x^y;
        //напишите тут ваш код
    }
будет правильным ответом возьмите любые интересные вам числа, и решите этот пример на листке бумаги переводя каждое число в байткод вручную
Nrostochel Уровень 13
18 апреля 2026
Кто тоже просто зделал

int z = x;
x = y;
y = z;
А не то незнамо что что они зделали
Валерка Ферум Уровень 32
21 февраля 2026
Спасибо за лекцию, скипнул)
Bioninja86 Уровень 11
28 января 2026
Не понимаю смысла таких задач, как последняя. Как будто бы рассчитано на то, что ты либо с ментором учишься, который разъяснит про свойство XOR и ты быстро продвинешься дальше, либо будешь доолго мучаться, пытаясь допереть своим умом. Такая метода дико замедляет и вообще не помогает быстро освоить синтаксис. Растягивание резины какое-то
Bohdan Уровень 1
17 января 2026
Отличная лекция, чтобы скипнуть
AlexSa4kov Уровень 25
2 декабря 2025
Кто-то тоже решал методом перебора с комментариями?😓😓😓
Evgenii Petrov Уровень 1
25 октября 2025
{Хотя ошибаюсь - в микроконтроллерах может применяться
Evgenii Petrov Уровень 1
25 октября 2025
Всегда знал про флаги, но это ТАКАЯ УЗКАЯ НПРАВЛЕННОСТЬ - что караул, лет 20 я про не не слышал... Вообще... По-моему - она закончилась вмести с zx-spectrum 128
Evgenii Petrov Уровень 1
25 октября 2025
Swap по-новому подсказка: То есть, если ты "замешал" два числа, ты можешь "вытащить" одно из них, снова применив XOR с другим.
Evgenii Petrov Уровень 1
25 октября 2025
2 - 23564 Сложновата.... Раскладываем на 1 и 0 и смотрим, где И а где ИЛИ и что будет.