Z bitnimi ope­ra­ci­ja­mi v Javi lahko posamezne bite ob­de­lu­je­te na kakršen koli način želite. Sedem operacij je struk­tu­ri­ra­nih podobno in sledi fiksnim pravilom, ki so enostavna za učenje.

Kaj so bitni ope­ra­ter­ji in za kaj se upo­ra­blja­jo?

Java ope­ra­ter­ji so pomembno orodje pri delu s pro­gram­skim jezikom. Poleg mnogih drugih možnosti in funkcij vam omogočajo ma­ni­pu­la­ci­jo naj­manj­ših možnih enot in­for­ma­cij: bitov. Biti (binarne števke) imajo svoj številčni sistem, ki temelji na vre­dno­stih 0 in 1. Če želite po­i­zve­do­va­ti binarne vrednosti bit po bit, po­tre­bu­je­te bitni operator v Javi. To lahko uporabite za numerične po­dat­kov­ne tipe (byte, char, int, short, long).

Čeprav te funkcije ne boste po­tre­bo­va­li vsak dan, je lahko koristna v številnih si­tu­a­ci­jah. Na primer, lahko pride prav, če želite pri pretvorbi podatkov pri­hra­ni­ti prostor, če želite uporabiti operator XOR ali če želite samo spre­me­ni­ti bit. So tudi osnova za vse višje operacije vezja. Zato je pomembno razumeti osnovno delovanje bitnih ope­ra­tor­jev v Javi.

Kateri bitni ope­ra­ter­ji Java obstajajo?

V Javi je skupaj sedem različnih bitnih ope­ra­tor­jev. Da bi dobili celovito ra­zu­me­va­nje, bomo začeli z ope­ran­do­ma a in b.

  • ~ (bitno NOT, dopolnilo): Ta operator obrne bite. 0 postane 1, 1 pa postane 0.
  • & (bitno AND): Ta operator izpiše 1, če sta oba operanda 1. V na­spro­tnem primeru izpiše 0.
  • | (bitno OR): Ta operator izda 1, če je eden od dveh operandov tudi 1.
  • ^ (XOR ali bitno izključno OR): Ta operator izda 0, če imata oba operanda enako vrednost. V na­spro­tnem primeru izda 1.
  • << (premik v levo): Ta operator premakne operand a za b položajev v levo. Če to povzroči prazne prostore, se ti prostori zapolnijo z 0.
  • >> (premik v desno z znakom, arit­me­tič­ni): Ta operator premakne vse bite a za b pozicij v desno. Če je bil bit z najvišjo vre­dno­stjo na­sta­vljen pred izvedbo, ostane na­sta­vljen tudi po izvedbi. Negativna števila ostanejo negativna.
  • >>>> (desni premik brez predznaka, logično): Ta operator premakne bite a za b pozicij v desno. Prostori so vedno za­pol­nje­ni z 0.

Bitno NOT

Bitni operator NOT v Javi je pred­sta­vljen s tilde (~). Negira vse bite, tako da ničle spremeni v enice in enice v ničle. Vzemimo za primer število 20. V binarnem zapisu izgleda takole: 10100. Če uporabimo bitni operator NOT, se bo vsak bit števila zamenjal: 10100 postane 01011. To je vrednost izraza ~20. Če to binarno število pre­tvo­ri­mo nazaj v decimalno število, dobimo vrednost -21. Če želite ta postopek pre­iz­ku­si­ti v Javi, vnesite naslednjo kodo in ukaz Java System.out.println, da izpišete rezultat.

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

Če ste vse vnesli pravilno, naj bi izpis kazal „-21“.

Bitno AND

Bitwise AND primerja dve števili v njihovi binarni obliki bit za bitom. Prvi bit prvega števila se primerja s prvim bitom drugega števila, drugi z drugim bitom in tako naprej. Če sta oba bita 1, je izhod 1. Če to ni primer (oba bita sta 0 ali eden od bitov je 0), je izhod 0. V spodnjem primeru si bomo ogledali dve decimalni številki 18 in 25. Kot binarna številka je 18 10010, 25 v binarni notaciji pa 11001. Sedaj pri­mer­jaj­mo ti dve številki in iz njih določimo tretjo številko.

18 = 10010 25 = 11001

Prva dva bita v številkah sta oba 1, zato se tudi končno število začne z 1. Drugi bit številke 25 je prav tako 1, vendar je drugi bit številke 18 0, zato je števka v tretji številki 0. Po pregledu obeh številk bit za bitom dobimo binarno število 10000. Če to pre­tvo­ri­mo v decimalno število, bo rezultat 16.

Koda izgleda takole:

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

Izhod v konzoli naj bi bil 16.

Bitno ali

Java operator bitwise OR prav tako primerja dve številki bit za bitom. V tem primeru pa mora imeti le eden od dveh operandov vrednost 1, da je rezultat 1. Če vzamemo številke iz prej­šnje­ga primera, bo izgledalo takole:

18 = 10010 25 = 11001

Ker vsi biti razen tretjega vsebujejo vsaj eno 1, je končno število: 11011. Pre­tvor­je­no dobimo 27.

Tako izgleda ta primer v kodi:

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

XOR

XOR ali bitno izključno OR (^) je podobno bitnemu OR. Pri bitnem OR mora biti eden ali oba operanda 1, da se izpiše 1. Pri XOR pa se 1 izpiše le, če je natanko ena od dveh vrednosti 1. Da bi bolje razumeli, kako deluje XOR, si oglejmo primer:

18 = 10010 25 = 11001

Prva dva bita imata vrednost 1, zato je z bitnim ope­ra­tor­jem v Javi rezultat 0. Drugi bit števila 18 je 0, drugi bit števila 25 pa je 1. Rezultat je vrednost 1. Če na­da­lju­je­mo, dobimo število 01011. V decimalni obliki je to 11.

Tukaj je koda:

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

Premik v levo

Premik v levo premakne bite vrednosti a v levo za razdaljo b. Nastale prazne prostore zapolni z 0. To jasno ponazarja vrednost int, ki zavzema 32 bitov v po­mnil­ni­ku. Vzemimo spet število 20 ali 10010 in ga pre­ma­kni­mo za vrednost b 2, da dobimo vrednost c 1001000. Na konec se postavita dve ničli. 1001000 ustreza decimalni vrednosti 72.

Tako izgleda ta proces v kodi:

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

Premik v desno z znakom

Desni premik deluje v nasprotni smeri. Tukaj se biti vrednosti a pre­ma­kne­jo v desno za vrednost b, kar da vrednost c. Posledica tega je, da se zadnji biti izpustijo. Če pre­ma­kne­mo 20 ali 10010 za dve mesti v desno, je rezultat 100 ali 4.

Tukaj je koda:

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

Pomembno je opozoriti, da če je a pozitivno število, se prostori zapolnijo z 0. Če je negativno, se prostori na­do­me­sti­jo z 1.

Premik v desno brez znaka

Načeloma deluje bitni operator Java za premik v desno brez znaka (>>>) na enak način. Edina razlika je, da so prostori, ki nastanejo na levi strani zaradi premika v desno, vedno za­pol­nje­ni z 0. To vedno da pozitivno število, tudi če je bila začetna vrednost negativna. 4c5f986ec517d687f98f93f0abe2fb9b

e147393cf30084fd4e831d7848643eb9

e66d2063db54d8c1ede35da28312c9ac

Go to Main Menu