JavaRush /Курси /Java Syntax Zero /Побітові операції в Java

Побітові операції в Java

Java Syntax Zero
Рівень 9 , Лекція 5
Відкрита

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.

Коментарі (29)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Stas Semenyuk_ЗСУ Рівень 18
21 лютого 2025
Побітова задача не така й складна. По-перше, переводимо всі цифри у двійковий(нижче у коментах це вже є). Потім вмикаємо логіку. Знаємо, що маємо отримати, і обчислюємо з кінця. Не лінуємося все писати на папері.
ZSUnix Рівень 10
23 грудня 2024
Б...ь, в інтернеті 100500 точних копій цієї статі. Всі вони бздять одне і теж, і тими ж словами (100% копії), що таке бітові оператори, але, б...ь, жодна б...ь так і не посяйнюя нах... ці операції потрібні? що вони дають? Ну ладно, з побітовими зсувами це і коню понятно : множення || ділення на 2^n. А шо мені дасть той грьобаний &, чи |, якщо я в результаті отримаю ХЗнаШо?
IronMan57 Рівень 28
29 листопада 2024
На цьому сайті є корисна стаття про логічні оператори та операції Логические операторы в Java У тій статті є така фраза "...подробнее и уже на совсем другом уровне к этим операциям подходят в конце квеста Multithreading..." Можливо, на тому рівні (точно не знаю, мені ще туди далеко) знімається питання "нахіба?" відносно побітових операцій.
IronMan57 Рівень 28
29 листопада 2024
Розв'язуючи останню задачу до цієї лекції (про перестановку змінних місцями) відкрив для себе ще один спосіб перестановки змінних місцями без використання третьої змінної. x = y - x; y = y - x; x = y + x;
Alex Lu Рівень 10
9 серпня 2024
замало пояснень цієї теми. варто додати більше прикладів з використанням та нагадати як взагалі двійкові операції виконуються
Гаркін Рівень 14
16 березня 2024
Для того, щоб розібратись з завданням "Побітові операції" написав до кожного рядка System.out.print("25 in bit = "); System.out.println(Integer.toBinaryString(25)); System.out.print("x & 25 =" + x + " ; bit = "); System.out.println(Integer.toBinaryString(x)); System.out.println(); потім пригадав першу лекцію курсу "Harvard CS50" (де розповідали про бінарний код . Дякую Максим Зелінський за нагадування). Так ще і на аркуші числа написав. Так, завдання я вирішив. Але навіщо воно треба сучасному програмісту... сподіваюсь у подальших лекціях зрозумію. Ps. При здачі завдання усі написані рядки треба ВИДАЛИТИ! Ви можете лише закоментити два рядки.
Гаркін Рівень 14
17 березня 2024
Якщо не зрозуміли

String.format("x=%d, y=%d", x, y)
то вам читати "Форматируем вывод чисел в Java" https://javarush.com/groups/posts/1412-formatiruem-vihvod-chisel-v-java
Гаркін Рівень 14
18 березня 2024
Ага. А якщо в декого є питання по завданню "Swap по-новому", то ... не лише у Вас! і трохи коментів є тут: https://javarush.com/ua/help/82447
gummer Рівень 11
5 березня 2024
Круто, що ви показали, як оператор | працює з бітами, але не показали, як він працює з числами Простими числами, з котрими ми працюємо в задачі Лол.
gummer Рівень 11
5 березня 2024
Божечки, справді? В своєму ж рішенні не можна писати собі коментарі "на полях"? Сюр Пофіксіть, будь ласка, автоперевіряльник завдань, бо це крінж, коли правильне рішення тобі повертає просто тому що в тебе в коді є коменти -_-
Василь Рівень 4
31 липня 2023
це схоже як нам забороняли у школі користуватися калькулятором, хоча в реальному житті всі користуються. Так і тут, рахувати біти "вручну", нахіба, якщо знову таки є калькулятори і конвектори для цього. В реальному житті це зустрічається дуже рідко, тому не особо забивайте голову. Хіба що на співбесіді можуть запитати.
28 квітня 2023
Щоб нормально розібратись в цій темі, бажано прочитати хоча б пів книги "Код. Таємна мова інформатики". Для розуміння як взагалі компʼютер обробляє дані
Anonymous #3425794 Рівень 11
8 грудня 2024
Можна пів години-годину приділити темі з булевої алгебри: "Штрих Шеффера, Стрілка Пірса". Подивитись як додавати віднімати множити біти, що таке кон'юнкція, диз'юнкція і т.д