Kaj so bitni operaterji v Javi in kako jih uporabljati
Z bitnimi operacijami v Javi lahko posamezne bite obdelujete na kakršen koli način želite. Sedem operacij je strukturiranih podobno in sledi fiksnim pravilom, ki so enostavna za učenje.
Kaj so bitni operaterji in za kaj se uporabljajo?
Java operaterji so pomembno orodje pri delu s programskim jezikom. Poleg mnogih drugih možnosti in funkcij vam omogočajo manipulacijo najmanjših možnih enot informacij: bitov. Biti (binarne števke) imajo svoj številčni sistem, ki temelji na vrednostih 0 in 1. Če želite poizvedovati binarne vrednosti bit po bit, potrebujete bitni operator v Javi. To lahko uporabite za numerične podatkovne tipe (byte, char, int, short, long).
Čeprav te funkcije ne boste potrebovali vsak dan, je lahko koristna v številnih situacijah. Na primer, lahko pride prav, če želite pri pretvorbi podatkov prihraniti prostor, če želite uporabiti operator XOR ali če želite samo spremeniti bit. So tudi osnova za vse višje operacije vezja. Zato je pomembno razumeti osnovno delovanje bitnih operatorjev v Javi.
Kateri bitni operaterji Java obstajajo?
V Javi je skupaj sedem različnih bitnih operatorjev. Da bi dobili celovito razumevanje, bomo začeli z operandoma 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 nasprotnem 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 nasprotnem 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, aritmetični): Ta operator premakne vse bite a za b pozicij v desno. Če je bil bit z najvišjo vrednostjo nastavljen pred izvedbo, ostane nastavljen 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 zapolnjeni z 0.
Bitno NOT
Bitni operator NOT v Javi je predstavljen 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 pretvorimo nazaj v decimalno število, dobimo vrednost -21. Če želite ta postopek preizkusiti 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 primerjajmo 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 pretvorimo v decimalno število, bo rezultat 16.
Koda izgleda takole:
public class Main {
public static void main(String[] args) {
System.out.println(18&25);
}
}javaIzhod 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šnjega primera, bo izgledalo takole:
18 = 10010 25 = 11001
Ker vsi biti razen tretjega vsebujejo vsaj eno 1, je končno število: 11011. Pretvorjeno dobimo 27.
Tako izgleda ta primer v kodi:
public class Main {
public static void main(String[] args) {
System.out.println(18|25);
}
}javaXOR
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 operatorjem v Javi rezultat 0. Drugi bit števila 18 je 0, drugi bit števila 25 pa je 1. Rezultat je vrednost 1. Če nadaljujemo, 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);
}
}javaPremik 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 pomnilniku. Vzemimo spet število 20 ali 10010 in ga premaknimo 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);
}
}javaPremik v desno z znakom
Desni premik deluje v nasprotni smeri. Tukaj se biti vrednosti a premaknejo v desno za vrednost b, kar da vrednost c. Posledica tega je, da se zadnji biti izpustijo. Če premaknemo 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);
}
}javaPomembno je opozoriti, da če je a pozitivno število, se prostori zapolnijo z 0. Če je negativno, se prostori nadomestijo 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 zapolnjeni z 0. To vedno da pozitivno število, tudi če je bila začetna vrednost negativna. 4c5f986ec517d687f98f93f0abe2fb9b
e147393cf30084fd4e831d7848643eb9
e66d2063db54d8c1ede35da28312c9ac