Pomocou bitových operátorov jazyka Java môžete manipulovať s jednotlivými bitmi akýmkoľvek spôsobom. Sedem operátorov má podobnú štruktúru a riadi sa pevnými pravidlami, ktoré sa ľahko naučíte.

Čo sú bitové operátory a na čo sa používajú?

Operátory Java sú dôležitým nástrojom pri práci s programovacím jazykom. Okrem mnohých ďalších možností a funkcií vám poskytujú možnosť manipulovať s najmenšími možnými jednotkami informácií: bitmi. Bity (binárne číslice) majú vlastný číselný systém založený na hodnotách 0 a 1. Ak chcete dotazovať binárne hodnoty bit po bite, potrebujete bitový operátor v Jave. Môžete ho použiť na numerické datové typy (byte, char, int, short, long).

Hoci túto funkciu nebudete potrebovať každý deň, môže byť užitočná v mnohých situáciách. Napríklad sa môže hodiť, ak chcete ušetriť miesto pri konverzii údajov, ak chcete použiť operátor XOR alebo ak chcete len zmeniť bit. Sú tiež základom pre všetky vyššie operácie obvodov. Preto je dôležité pochopiť základnú funkčnosť bitových operátorov v Jave.

Aké bitové operátory existujú v jazyku Java?

V jazyku Java existuje celkom sedem rôznych bitových operátorov. Aby sme získali komplexné pochopenie, začneme s operandmi a a b.

  • ~ (bitové NOT, doplnok): Tento operátor invertuje bity. 0 sa stane 1 a 1 sa stane 0.
  • & (bitové AND): Tento operátor vygeneruje 1, ak sú obe operandy 1. V opačnom prípade vygeneruje 0.
  • | (bitové OR): Tento operátor produkuje 1, ak je jeden z dvoch operandov tiež 1.
  • ^ (XOR alebo bitové exkluzívne OR): Tento operátor vygeneruje 0, ak majú oba operandy rovnakú hodnotu. V opačnom prípade vygeneruje 1.
  • << (posun doľava): Tento operátor posunie operand a doľava o b pozícií. Ak to vedie k vzniku medzier, medzery sa vyplnia hodnotou 0.
  • >> (posun doprava so znamienkom, aritmetický): Tento operátor posunie všetky bity a o b pozícií doprava. Ak bol bit s najvyššou hodnotou nastavený pred vykonaním, zostane nastavený aj po vykonaní. Záporné čísla zostanú záporné.
  • >>>> (posun doprava bez znamienka, logický): Tento operátor posúva bity a doprava o b pozícií. Medzery sú vždy vyplnené hodnotou 0.

Bitové NOT

Bitový operátor Java bitwise NOT je reprezentovaný vlnovkou (~). Neguje všetky bity, pričom nuly mení na jednotky a jednotky na nuly. Vezmime si napríklad číslo 20. V binárnom tvare vyzerá takto: 10100. Ak použijeme bitový operátor NOT, každý bit čísla sa prepne: 10100 sa zmení na 01011. Toto je hodnota výrazu ~20. Ak toto binárne číslo prevedieme späť na desiatkové číslo, dostaneme hodnotu -21. Ak chcete tento proces vyskúšať v Jave, zadajte nasledujúci kód a príkaz Java System.out.println na zobrazenie výsledku.

public class Main {
	public static void main(String[] args) {
	int value1 = 20;
	System.out.println(~value1);
}
}
java

Ak ste všetko zadali správne, výsledok by mal byť „-21“.

Bitové AND

Bitové AND porovnáva dve čísla v ich binárnej forme bit po bite. Prvý bit prvého čísla sa porovnáva s prvým bitom druhého čísla, druhý s druhým bitom a tak ďalej. Ak sú oba bity 1, výstupom je 1. Ak tomu tak nie je (oba bity sú 0 alebo jeden z bitov je 0), výstupom je 0. V nižšie uvedenom príklade sa pozrieme na dve desiatkové čísla 18 a 25. Ako binárne číslo je 18 10010 a 25 v binárnom zápise je 11001. Teraz porovnajme tieto dve čísla a určime z nich tretie číslo.

18 = 10010 25 = 11001

Prvé dva bity v číslach sú oba 1, takže výsledné číslo tiež začína číslicou 1. Druhý bit čísla 25 je tiež 1, ale druhý bit čísla 18 je 0, takže číslica v treťom čísle je 0. Po prechode oboch čísel bit po bite dostaneme binárne číslo 10000. Ak ho prevedieme na desiatkové číslo, výsledkom bude 16.

Kód vyzerá takto:

public class Main {
	public static void main(String[] args) {
	System.out.println(18&25);
}
}
java

Výstup v konzole by mal byť 16.

Bitové OR

Java operátor bitwise OR tiež porovnáva dve čísla bit po bite. V tomto prípade však len jeden z dvoch operandov musí mať hodnotu 1, aby výsledok bol 1. Ak použijeme čísla z predchádzajúceho príkladu, bude to vyzerať takto:

18 = 10010 25 = 11001

Keďže všetky bity okrem tretej číslice obsahujú aspoň jednu 1, výsledné číslo je: 11011. Po prevode dostaneme 27.

Takto vyzerá tento príklad v kóde:

public class Main {
	public static void main(String[] args) {
	System.out.println(18|25);
}
}
java

XOR

XOR alebo bitové exkluzívne OR (^) je podobné bitovému OR. Pri bitovom OR musí byť jeden alebo oba operandy 1, aby bol výstup 1. Pri XOR je však 1 výstupom len vtedy, ak presne jedna z dvoch hodnôt je 1. Aby sme lepšie pochopili, ako funguje XOR, pozrime sa na príklad:

18 = 10010 25 = 11001

Prvé dva bity majú hodnotu 1, takže s týmto bitovým operátorom v Jave je výsledok 0. Druhý bit čísla 18 je 0, ale druhý bit čísla 25 je 1. Výsledkom je hodnota 1. Ak pokračujeme ďalej, dostaneme číslo 01011. V desiatkovej forme je to 11.

Tu je kód:

public class Main {
	public static void main(String[] args) {
	System.out.println(18^25);
}
}
java

Posun doľava

Posun vľavo posúva bity hodnoty a doľava o vzdialenosť b. Výsledné medzery sa vyplnia hodnotou 0. Hodnota int, ktorá zaberá 32 bitov v pamäti, to jasne ilustruje. Vezmime si opäť číslo 20 alebo 10010 a posuňme ho o hodnotu b 2, aby sme dostali hodnotu c 1001000. Na koniec sa umiestnia dve nuly. 1001000 zodpovedá desiatkovej hodnote 72.

Takto vyzerá tento proces v kóde:

public class Main {
	public static void main(String[] args) {
	int a = 20;
	int b = 2;
	int c = (a << b);
	System.out.println(c);
}
}
java

Posun doprava so znamienkom

Posun doprava funguje opačne. Tu sa bity hodnoty a posunú doprava o hodnotu b, čím vznikne hodnota c. Výsledkom je, že posledné bity zostanú vynechané. Ak posunieme 20 alebo 10010 o dve miesta doprava, výsledkom je 100 alebo 4.

Tu je kód:

public class Main {
	public static void main(String[] args) {
	System.out.println(20 >> 2);
}
}
java

Je dôležité poznamenať, že ak je a kladné číslo, medzery sa vyplnia číslom 0. Ak je záporné, medzery sa nahradia číslom 1.

Posun doprava bez znamienka

V zásade funguje bitový operátor Java posun doprava bez znamienka (>>>) rovnakým spôsobom. Jediný rozdiel spočíva v tom, že medzery vytvorené na ľavej strane posunom doprava sú vždy vyplnené hodnotou 0. Výsledkom je vždy kladné číslo, aj keď počiatočná hodnota bola záporná.

Prejsť na hlavné menu