Вступ до маніпуляції бітами

Зазвичай програміст працює над змінними типів даних, такими як int, float, double, String або колекції типу Array, List, ArrayList тощо. У деяких випадках програмістам потрібно заглибитись у дані в байті та на бітовому рівні, щоб витягти та обробляти дані. Такі мови, як Java та C #, дозволяють вам маніпулювати даними на рівні бітів, а це означає, що у вас є доступ до певного біту в байті. У цій темі ми збираємося дізнатись про маніпуляцію бітами на Java.

Маніпуляція бітами часто потрібна під час роботи над стисненням даних та шифруванням даних, коли програмісту потрібно витягувати дані на рівні бітів, щоб кодувати, декодувати або стискати вихідні дані. Існує багато інших додатків маніпуляції з бітами, які ми побачимо далі в цій статті.

Java підтримує 3-розрядний зсув та 4 бітові оператори для виконання операцій на рівні бітів. Ці оператори можуть використовуватися на цілісних типах (int, short, long і byte) для виконання операцій на рівні бітів.

Оператори побітових і швидких змін Java

ОператорОпис
&Побітові І
|Побітові АБО
~Побітове доповнення
<<Зсув вліво
>>Права зсув
^Побітовий XOR
>>>Непідписаний правий зсув

Оператори біт-маніпуляції на Java

давайте розглянемо операторів більш детально

1) Побітові АБО

Це двійковий оператор, який приймає 2 операнди і позначається символом «| ". Побітовий оператор порівнює відповідні біти двох операндів. Якщо будь-який з бітів операнда дорівнює 1, то вихід 1, якщо ні, це буде 0.

Приклад

15 = 00001111 (In Binary)
27 = 00011011 (In Binary)
Bitwise OR Operation of 15 and 27
00001111
| 00011011
________
00011111 = 31 (In decimal)

Програма Java

class BitwiseOR (
public static void main(String() args) (
int operand1 = 15, operand2 = 27, output
output= operand1 | operand2;
System.out.println(output);
)
)

Вихід: 31

2) Побітові І

Це також бітовий оператор, який приймає 2 операнди і позначається символом "&". побітовий оператор порівнює відповідні біти двох операндів. Якщо обидва біта операнда дорівнюють 1, то вихід 1, інакше 0.

Приклад

15 = 00001111 (In Binary)
27 = 00011011 (In Binary)
Bitwise AND Operation of 15 and 27
00001111
| 00011011
________
00001011 = 11 (In decimal)

Програма Java

class BitwiseAND (
public static void main(String() args) (
int operand1 = 15, operand2 = 27, output
output= operand1 & operand2;
System.out.println(output);
)
)

Вихід: 11

3) Побітове доповнення

На відміну від двох інших операторів, про які ми говорили до цього часу, для цього потрібен лише один операнд і позначається символом «~». Цей оператор інвертує біт операнда. Якщо біт операнда дорівнює 0, то він перетворює його в 1 і навпаки.

Приклад

15 = 00001111 (In Binary)
Bitwise complement Operation of 15
~ 00001111
________
11110000 = 240 (In decimal)

Програма Java

class BitwiseComplement (
public static void main(String() args) (
int operand= 15, output;
output= ~operand;
System.out.println(output);
)
)

Вихід: -16

Примітка: якщо ви запускаєте програму Java, ви отримаєте -16 як вихід, а не 240, оскільки компілятор показує 2 доповнення цього числа, тобто негативне поняття двійкового числа.

Доповнення 2 до будь-якого числа еквівалентно - (n + 1), де n - число, доповнення якого 2 слід обчислити. У нашому випадку доповненням 2 операнду 15 є -16, що також є результатом програми.

4) Побітовий XOR

Побітовий XOR - це двійковий оператор, який приймає 2 операнди і позначає символом «^». цей оператор порівнює відповідні біти двох операндів. Якщо відповідні біти двох операндів різні, то це дає 1 як вихід 0.

Побітовий оператор XOR еквівалентний (Бітовий АБО + Побітовий доповнення)

Приклад

15 = 00001111 (In Binary)
27 = 00011011 (In Binary)
Bitwise XOR Operation of 15 and 27
00001111
00011011
________
00010100 = 20 (In decimal)

Програма Java

class BitwiseXor (
public static void main(String() args) (
int operand1= 15, operand2 = 27, output;
output = operand1 operand2;
System.out.println(output);
)
)

Вихід: 20

5) Підписаний лівий зсув

Лівий оператор зсуву в бітовому режимі зміщує бітову схему вліво на певну кількість разів, вказану в операнді. Лівий оператор зсуву позначається символом «<<».

Приклад

123 (In binary: 01111011)
123 << 1 evaluates to 246 (In binary: 011110110)
123 << 2 evaluates to 492 (In binary: 0111101100)
123 << 3 evaluates to 984 (In binary:01111011000)

Програма Java

class LeftShiftOperator (
public static void main(String() args) (
int operand = 123;
System.out.println(operand << 1);
System.out.println(operand << 2);
System.out.println(operand << 3);
)
)

вихід: 246, 492, 984

6) Підписаний правий зсув

Підписаний оператор правої зміни працює точно так само, як і оператор лівої зміни, лише якщо він додає нульові біти, переміщується у позицію високого порядку.

Приклад

123 (In binary: 01111011)
123 >> 1 evaluates to 61 (In binary: 00111101)
123 >> 2 evaluates to 30 (In binary: 00011110)
123 >> 3 evaluates to 15 (In binary:00001111)

Програма Java

class RightShiftOperator (
public static void main(String() args) (
int operand = 123;
System.out.println(operand >> 1);
System.out.println(operand >> 2);
System.out.println(operand >> 3);
)
)

Вихід: 61, 30, 15

7) Непідписаний правий зсув

Оператор правого зсуву зміщує нуль у крайнє ліве положення на певну кількість бітів, зазначених в операнді.

Програма Java

class UnSignedRightShiftOperator (
public static void main(String() args) (
int operand = 123;
System.out.println(operand >>> 1);
System.out.println(operand >>> 2);
System.out.println(operand >>> 3);
)
)

Вихід : 61, 30, 15

Висновок - Маніпуляція бітами на Java

Тепер, коли ми дійшли до кінця статті, давайте завершимо підсумок ключового моменту, про який ми говорили в цій статті. Ми бачили, що таке трохи маніпуляція та різні її випадки використання. Ми також вивчили різні типи побітових операторів (побітові І, Побітові АБО, Бітові доповнення та Побітові XOR) та оператори зсуву бітів (Підписаний оператор лівої зсуву, підписаний оператор правого зсуву та непідписаний оператор правого зсуву) разом із прикладом та зразком Програма Java, що пояснює окремих операторів.

Рекомендовані статті

Це посібник з маніпуляції бітами на Java. Тут ми детально обговорюємо оператори Java Bitwise і Bitshift з прикладами та програмами Java та її результатами. Ви також можете переглянути наступну статтю, щоб дізнатися більше -

  1. Що таке інтерфейс Java?
  2. Інструменти Java
  3. Рамки Python
  4. Булові оператори на Java