Оглавление:
Побитовые операторы в Java
Побитовые операторы в Java
В языке программирования Java определено несколько побитовых операторов. Эти операторы применяются к целочисленным типам данных, таким как byte, short, int, long и char.
Список побитовых операторов
- & — побитовое И (AND)
- | — побитовое ИЛИ (OR)
- ^ — побитовое исключающее ИЛИ (XOR)
- ~ — побитовое дополнение (NOT)
- << — сдвиг влево
- >> — сдвиг вправо
- >>> — сдвиг вправо с заполнением нулями
Побитовые операторы выполняют операции над каждым битом чисел по отдельности.
Пример
int a = 55;
int b = 24;
System.out.println(Integer.toBinaryString(a)); // 110111
System.out.println(Integer.toBinaryString(b)); // 11000
После преобразования в двоичный код:
a = 110111 b = 011000
Побитовое И (&)
Оператор & (AND) возвращает 1 в том разряде, где оба операнда имеют бит 1. Иначе возвращается 0.
Пример:
int result = a & b;
System.out.println(Integer.toBinaryString(result)); // 10000
System.out.println(result); // 16
Пошаговое объяснение:
| Операнд | Биты |
|---|---|
| a = 55 | 110111 |
| b = 24 | 011000 |
| a & b | 010000 |
Результат — двоичное число 010000, что в десятичной системе равно 16.
Побитовое ИЛИ (|)
Оператор | возвращает 1 в том разряде, где хотя бы один из операндов имеет бит 1.
int result = a | b;
System.out.println(Integer.toBinaryString(result)); // 111111 System.out.println(result); // 63
| Операнд | Биты |
|---|---|
| a = 55 | 110111 |
| b = 24 | 011000 |
| a | b | 111111 |
Результат: 111111 = 63.
Побитовое исключающее ИЛИ (^)
Оператор ^ (XOR) возвращает 1 в том разряде, где биты различаются, и 0, где одинаковы.
int result = a ^ b;
System.out.println(Integer.toBinaryString(result)); // 101111 System.out.println(result); // 47
| Операнд | Биты |
|---|---|
| a = 55 | 110111 |
| b = 24 | 011000 |
| a ^ b | 101111 |
Результат: 101111 = 47.
Побитовое дополнение (~)
Оператор ~ инвертирует все биты числа — все 1 становятся 0, и наоборот.
int a = 55;
System.out.println(Integer.toBinaryString(~a)); // ...результат будет в дополнительном коде System.out.println(~a); // -56
При побитовом дополнении Java использует представление чисел в дополнительном коде, поэтому результат отрицательный.
Побитовые сдвиги
<<— сдвигает биты влево, заполняя справа нулями (умножение на 2 в степени N)>>— сдвигает биты вправо, сохраняя знак (деление на 2 в степени N)>>>— сдвигает вправо, заполняя нулями (независимо от знака)
Пример:
int a = 8;
System.out.println(a << 2); // 32 (8 * 2^2)
System.out.println(a >> 1); // 4 (8 / 2^1)
System.out.println(a >>> 1); // 4 (тот же результат для положительных чисел)
Домашнее задание
- Создайте две переменные
int aиint bс разными значениями. - Выведите их двоичное представление с помощью
Integer.toBinaryString(). - Примените к ним все побитовые операторы:
&,|,^,~,<<,>>,>>>. - Для каждого результата выведите двоичный и десятичный вид.
- Попробуйте объяснить, почему получились такие результаты.
Тест — Насколько ты понял урок?
Галерея
Мой канал в социальных сетях
Полезные статьи:
Введение Архитектура — это не просто способ расположить классы и модули. Это язык, на котором система разговаривает со временем. Сегодня Java-разработчик живёт в мире, где границы между сервисами, по...
1️⃣ HashMap / TreeMap / TreeSet (не потокобезопасные) HashMap: Структура: массив бакетов + связные списки / деревья (для коллизий). Под капотом: при put/remove происходит модификация массива бакетов ...
← Часть 1 — Основы параллельности в Go для Java-разработчиков Во второй части мы углубимся в синхронизацию и безопасность параллельного кода в Go. Для Java-разработчика полезно видеть аналоги: ...
Новые статьи:
Продолжаем серию статей для разработчиков, которые хотят изучить Go на основе знаний Java, и наоборот. В этой статье мы обсудим три ключевые темы: Resource Cleanup (освобождение ресурсов), Rate-Limiti...
Эта статья посвящена пониманию принципов работы с конкурентностью и синхронизацией в Go и Java. Мы рассмотрим ключевые подходы, такие как rate‑limiter, неблокирующие операции и планирование задач, сра...
Серия: Go для Java-разработчиков — разбор trace, профилирования и тестирования В этой статье мы разберем инструменты и практики для тестирования, отладки и профилирования в Go. Для Java-разработчика ...