Побитовые операторы в 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 (тот же результат для положительных чисел) 

Домашнее задание

  1. Создайте две переменные int a и int b с разными значениями.
  2. Выведите их двоичное представление с помощью Integer.toBinaryString().
  3. Примените к ним все побитовые операторы: &, |, ^, ~, <<, >>, >>>.
  4. Для каждого результата выведите двоичный и десятичный вид.
  5. Попробуйте объяснить, почему получились такие результаты.

Тест — Насколько ты понял урок?


Всего лайков:1
Мой канал в социальных сетях
Отправляя email, вы принимаете условия политики конфиденциальности

Полезные статьи:

Современные архитектурные подходы: от монолита к событийным системам
Введение Архитектура — это не просто способ расположить классы и модули. Это язык, на котором система разговаривает со временем. Сегодня Java-разработчик живёт в мире, где границы между сервисами, по...
Понимаем многопоточность в Java через коллекции и атомики
1️⃣ HashMap / TreeMap / TreeSet (не потокобезопасные) HashMap: Структура: массив бакетов + связные списки / деревья (для коллизий). Под капотом: при put/remove происходит модификация массива бакетов ...
Синхронизация и безопасность в Go vs Java | Сoncurrency часть 2
← Часть 1 — Основы параллельности в Go для Java-разработчиков Во второй части мы углубимся в синхронизацию и безопасность параллельного кода в Go. Для Java-разработчика полезно видеть аналоги: ...

Новые статьи:

Resource cleanup, rate‑limiting strategies, bounded vs unbounded channels - в Go vs Java | Паттерны, идиомы и лучшие практики Go
Продолжаем серию статей для разработчиков, которые хотят изучить Go на основе знаний Java, и наоборот. В этой статье мы обсудим три ключевые темы: Resource Cleanup (освобождение ресурсов), Rate-Limiti...
Разбираем: Rate‑limiter, non‑blocking operations, scheduler  Go vs Java | Concurrency часть 4
Эта статья посвящена пониманию принципов работы с конкурентностью и синхронизацией в Go и Java. Мы рассмотрим ключевые подходы, такие как rate‑limiter, неблокирующие операции и планирование задач, сра...
Разбираем: Trace, Profiling, Integration Testing, Code Coverage, Mocking, Deadlock Detection в Go vs Java | Testing, Debugging и Profiling
Серия: Go для Java-разработчиков — разбор trace, профилирования и тестирования В этой статье мы разберем инструменты и практики для тестирования, отладки и профилирования в Go. Для Java-разработчика ...
Fullscreen image