Треки
/
Java
Java
/
Салабус
/
Побітові операції
По

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

3 вправи

Про концепцію Побітові операції

У Java є оператори для роботи з бітами цілочисельного типу (byte, short, int, long або char).

Оператори зсуву

Щоб зсунути біти ліворуч, використовуємо <<, а щоб зсунути праворуч, >>.

// Shift two places to the left
0b0000_1011 << 2;
// # => 0b0010_1100

// Shift two places to the right
0b0000_1011 >> 2;
// # => 0b0000_0010

>> також називають оператором знакового зсуву, або арифметичного зсуву, бо біт, який він вставляє, збігається з його знаковим бітом. Це найлівіший біт. Він дорівнює 0, якщо значення додатне, і 1, якщо відʼємне. Зсув ліворуч за допомогою << завжди вставляє нулі праворуч.

// Shift 2 places to the right preserves the sign
// The binary value is two's complement of 0b0000_0110 (or 0x00000026), so the binary representation will be
// 1000_0000_0000_0000_0000_0000_0010_0110
int value = -0x7FFFFFDA;

// Shift two places to the right, preserving the sign bit
value >> 2;
// # => 1110_0000_0000_0000_0000_0000_0000_1001

Використовуємо >>> натомість, коли під час зсуву праворуч потрібно вставляти нулі. Вставляння нулів під час зсуву також називають логічним зсувом.

// Shift two places to the right, inserting 0s on the left
value >>> 2;
// # => 0010_0000_0000_0000_0000_0000_0000_1001

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

Побітове AND

Побітовий оператор AND (&) приймає два значення і виконує AND над кожним бітом. Він порівнює кожен біт першого значення з бітом у тій самій позиції другого значення. Якщо обидва біти дорівнюють 1, то біт результату теж 1. Інакше біт результату дорівнює 0.

0b0110_0101 & 0b0011_1100;
// # => 0b0010_0100

Побітове OR

Побітовий оператор OR (|) приймає два значення і виконує OR над кожним бітом. Він порівнює кожен біт першого значення з бітом у тій самій позиції другого значення. Якщо хоч один із бітів дорівнює 1, біт результату теж 1. Інакше він дорівнює 0.

0b0110_0101 | 0b0011_1100;
// # => 0b0111_1101

Побітове XOR

Побітовий оператор XOR (^) виконує побітовий XOR над двома значеннями. Як і побітові оператори AND та OR, він порівнює кожен біт першого значення з бітом у тій самій позиції другого значення. Якщо лише один із них дорівнює 1, біт результату дорівнює 1. Інакше він дорівнює 0.

0b0110_0101 ^ 0b0011_1100;
// # => 0b0101_1001

Побітове заперечення (~)

І наостанок, побітовий оператор заперечення (~) інвертує кожен біт. На відміну від попередніх операторів, це унарний оператор, який діє лише на одне значення.

~0b0110_0101;
// # => 0b1001_1010
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці

Вивчити концепцію Побітові операції