Java for Beginner
677 subscribers
546 photos
155 videos
12 files
837 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Побитовые операции в Java

Побитовые операции в Java позволяют напрямую манипулировать битами целочисленных данных, что может быть полезно для работы с флагами, оптимизации памяти, шифрования и других задач, требующих работы на низком уровне. Эти операции выполняются очень быстро и являются неотъемлемой частью многих эффективных алгоритмов.

Основные побитовые операции в Java

Побитовое И (AND): &
Побитовое ИЛИ (OR): |
Побитовое исключающее ИЛИ (XOR): ^
Побитовое отрицание (NOT): ~
Сдвиг влево: <<
Сдвиг вправо с сохранением знака: >>
Логический сдвиг вправо: >>>



1. Побитовое И (AND) — &

Оператор & сравнивает два числа побитово и возвращает результат, где каждый бит будет равен 1 только в случае, если оба сравниваемых бита равны 1.
public class BitwiseAndExample {
public static void main(String[] args) {
int a = 5; // 00000101
int b = 3; // 00000011
int result = a & b; // 00000001
System.out.println("Результат побитового AND: " + result); // 1
}
}
Этот оператор часто используется для маскирования битов. Например, можно использовать маску для извлечения только определенных битов из числа.


2. Побитовое ИЛИ (OR) — |

Оператор | сравнивает два числа и возвращает результат, где каждый бит будет равен 1, если хотя бы один из соответствующих битов равен 1.

public class BitwiseOrExample {
public static void main(String[] args) {
int a = 5; // 00000101
int b = 3; // 00000011
int result = a | b; // 00000111
System.out.println("Результат побитового OR: " + result); // 7
}
}
Оператор используется для установки битов в 1, если нужно включить несколько флагов.


3. Побитовое исключающее ИЛИ (XOR) — ^


Оператор ^ возвращает результат, где каждый бит равен 1, если соответствующие биты различны.

public class BitwiseXorExample {
public static void main(String[] args) {
int a = 5; // 00000101
int b = 3; // 00000011
int result = a ^ b; // 00000110
System.out.println("Результат побитового XOR: " + result); // 6
}
}
Этот оператор часто применяется для таких задач, как проверка на различие или изменение значений на уровне отдельных битов.


4. Побитовое отрицание (NOT) — ~

Оператор ~ инвертирует все биты числа: 1 превращается в 0, и наоборот. Это приводит к тому, что положительное число становится отрицательным.
public class BitwiseNotExample {
public static void main(String[] args) {
int a = 5; // 00000101
int result = ~a; // 11111010 (в десятичной системе это -6)
System.out.println("Результат побитового NOT: " + result); // -6
}
}
Побитовое отрицание часто используется при работе с масками и с числами в формате дополнительного кода (two’s complement).


5. Сдвиг влево — <<

Оператор сдвига влево сдвигает биты числа на заданное количество позиций влево, заполняя освободившиеся места нулями. Это аналогично умножению числа на степень двойки.
public class LeftShiftExample {
public static void main(String[] args) {
int a = 5; // 00000101
int result = a << 2; // 00010100 (в десятичной системе это 20)
System.out.println("Результат сдвига влево: " + result); // 20
}
}


6. Сдвиг вправо с сохранением знака — >>

Этот оператор сдвигает биты числа вправо, при этом заполняя слева биты в зависимости от знака числа. Если число положительное, добавляются нули, если отрицательное — единицы.
public class RightShiftExample {
public static void main(String[] args) {
int a = -5; // 11111111111111111111111111111011
int result = a >> 2; // 11111111111111111111111111111110
System.out.println("Результат сдвига вправо с сохранением знака: " + result); // -2
}
}


#Java #Training #Medium #Bitwise_Operators
7. Логический сдвиг вправо — >>>

Логический сдвиг вправо отличается от сдвига с сохранением знака тем, что всегда добавляет нули, независимо от того, положительное или отрицательное число.
public class UnsignedRightShiftExample {
public static void main(String[] args) {
int a = -5; // 11111111111111111111111111111011
int result = a >>> 2; // 00111111111111111111111111111110
System.out.println("Результат логического сдвига вправо: " + result); // 1073741822
}
}


Применение побитовых операций

Побитовые операции широко используются в низкоуровневых задачах, таких как:
Маскирование битов: Выборка или установка конкретных битов с использованием побитового И или ИЛИ.
Работа с флагами: Побитовые операции часто применяются для работы с флагами, когда одно целое число содержит несколько логических состояний.
Оптимизация операций: Некоторые математические операции, такие как умножение и деление на степени двойки, могут быть реализованы с помощью сдвигов, что ускоряет выполнение программы.


#Java #Training #Medium #Bitwise_Operators