Mis on Java bitiviisilised operaatorid ja kuidas neid kasutada?
Java bitiviisiliste operaatoritega saate üksikuid bitte manipuleerida nii, nagu soovite. Seitse operaatorit on üles ehitatud sarnaselt ja järgivad kindlaid reegleid, mida on lihtne õppida.
Mis on bitiviisilised operaatorid ja milleks neid kasutatakse?
Java operaatorid on programmeerimiskeele kasutamisel oluline tööriist. Lisaks paljudele teistele võimalustele ja funktsioonidele annavad need võimaluse manipuleerida väikseimaid võimalikke infoyksusi: bitte. Bitidel (binaarkoodidel) on oma numbrite süsteem, mis põhineb väärtustel 0 ja 1. Kui soovite küsida binaarväärtusi bithaaval, vajate Java-s bititehnilist operaatorit. Seda saab rakendada numbrilistele andmetüüpidele (byte, char, int, short, long).
Kuigi te ei vaja seda funktsiooni igapäevaselt, võib see paljudes olukordades kasulikuks osutuda. Näiteks võib see olla kasulik, kui soovite andmete teisendamisel ruumi säästa, kui soovite kasutada XOR-operaatorit või kui soovite lihtsalt ühte bitti muuta. Need on ka kõigi kõrgema taseme vooluahelate operatsioonide aluseks. Seetõttu on oluline mõista Java bitiviisiliste operaatorite põhilist funktsionaalsust.
Millised Java bitiviisilised operaatorid on olemas?
Java-s on kokku seitse erinevat bitiviisilist operaatorit. Üldise arusaamise saamiseks alustame operanditest a ja b.
- ~ (bitwise NOT, komplementaar): See operaator pöörab bittidest ümber. 0 muutub 1-ks ja 1 muutub 0-ks.
- & (bitwise AND): See operaator väljastab 1, kui mõlemad operandid on 1. Muul juhul väljastatakse 0.
- | (bitiviisiline OR): See operaator annab tulemuseks 1, kui üks kahest operandist on samuti 1.
- ^ (XOR või bitiviisiline eksklusiivne OR): See operaator väljastab 0, kui mõlemad operandid on sama väärtusega. Muul juhul väljastab see 1.
- << (vasakule nihutamine): see operaator nihutab operandi a b positsiooni võrra vasakule. Kui selle tulemuseks on tühikud, täidetakse tühikud 0-ga.
- >> (parempoolne nihutamine märgiga, aritmeetiline): See operaator nihutab kõik a biti b positsiooni võrra paremale. Kui enne täitmist oli seatud kõrgeima väärtusega bit, jääb see pärast täitmist samuti seatuks. Negatiivsed numbrid jäävad negatiivseks.
- >>>> (märgita parempoolne nihutus, loogiline): see operaator nihutab a bitti paremale b positsiooni võrra. Tühikud täidetakse alati 0-ga.
Bitwise NOT
Java bitiviisiline operaator bitiviisiline NOT on esindatud tildega (~). See negeerib kõik bitid, muutes nullid ühtedeks ja ühed nullideks. Võtame näiteks numbri 20. Binaarselt näeb see välja järgmiselt: 10100. Kui rakendame bitwise NOT operaatorit, vahetuvad kõik numbri bitid: 10100 muutub 01011-ks. See on väljendi ~20 väärtus. Kui teisendame selle binaarnumbri tagasi kümnendnumbri, saame väärtuse -21. Kui soovite seda protsessi Java-s proovida, sisestage järgmine kood ja Java-käsk System.out.println tulemuse väljastamiseks.
public class Main {
public static void main(String[] args) {
int value1 = 20;
System.out.println(~value1);
}
}javaKui olete kõik õigesti sisestanud, peaks väljundiks olema „-21”.
Bitiviisiline AND
Bitwise AND võrdleb kahte numbrit nende binaarses vormis bit haaval. Esimese numbri esimest bitti võrreldakse teise numbri esimese bitiga, teist bitti teise bitiga jne. Kui mõlemad bitid on 1, väljastatakse 1. Kui see nii ei ole (mõlemad bitid on 0 või üks bittidest on 0), väljastatakse 0. Allpool toodud näites vaatame kahte kümnendkohta 18 ja 25. Binaarnumbritena on 18 10010 ja 25 11001. Nüüd võrdleme neid kahte numbrit ja määrame nende põhjal kolmanda numbri.
18 = 10010 25 = 11001
Numbrites on esimesed kaks bitti mõlemad 1, seega algab tulemusnumber samuti numbriga 1. Numbrite 25 teine bitt on samuti 1, kuid numbri 18 teine bitt on 0, mistõttu kolmanda numbri number on 0. Pärast mõlema numbri bittide läbivaatamist saame tulemuseks binaarnumbri 10000. Kui teisendame selle kümnendnumbri, on tulemuseks 16.
Kood näeb välja järgmine:
public class Main {
public static void main(String[] args) {
System.out.println(18&25);
}
}javaKonsoli väljund peaks olema 16.
Bitiviisiline OR
Java operaator bitwise OR võrdleb ka kahte numbrit bithaaval. Sel juhul peab aga ainult ühel kahest operandist olema väärtus 1, et tulemuseks oleks 1. Kui võtame eelmise näite numbrid, siis see näeb välja järgmine:
18 = 10010 25 = 11001
Kuna kõik bittid, välja arvatud kolmas number, sisaldavad vähemalt ühte 1, on tulemuseks number: 11011. Konverteerides saame tulemuseks 27.
Siin on näide, kuidas see kood välja näeb:
public class Main {
public static void main(String[] args) {
System.out.println(18|25);
}
}javaXOR
XOR ehk bitiviisiline eksklusiivne OR (^) on sarnane bitiviisilise OR-iga. Bitiviisilise OR-i puhul peab üks või mõlemad operandid olema 1, et väljundiks oleks 1. XOR-i puhul aga on väljundiks 1 ainult siis, kui täpselt üks kahest väärtusest on 1. Et paremini mõista, kuidas XOR töötab, vaatame ühte näidet:
18 = 10010 25 = 11001
Esimesed kaks bitti on väärtusega 1, seega Java bititehnilise operaatori abil on tulemuseks 0. 18 teine bitt on 0, kuid 25 teine bitt on 1. Selle tulemuseks on väärtus 1. Kui jätkame, saame numbri 01011. Desimaalsüsteemis on see 11.
Siin on kood:
public class Main {
public static void main(String[] args) {
System.out.println(18^25);
}
}javaVasakule nihutamine
Vasakule nihutamine nihutab väärtuse a bitte vasakule kaugusega b. Tekkinud tühikud täidetakse numbriga 0. Seda illustreerib hästi int-tüüpi väärtus, mis võtab mälus 32 bitti. Võtame taas numbri 20 ehk 10010 ja nihutame seda b-väärtusega 2, saades c-väärtuseks 1001000. Lõppu lisatakse kaks nulli. 1001000 vastab kümnendväärtusele 72.
Siin on näide, kuidas see protsess koodis välja näeb:
public class Main {
public static void main(String[] args) {
int a = 20;
int b = 2;
int c = (a << b);
System.out.println(c);
}
}javaParemini nihutamine märgiga
Parempoolne nihutamine toimib vastupidiselt. Siin nihutatakse väärtuse a bitti väärtuse b võrra paremale, mis annab tulemuseks väärtuse c. Selle tulemusena jäävad viimased bittid välja. Kui nihutame 20 või 10010 kaks kohta paremale, on tulemuseks 100 või 4.
Siin on kood:
public class Main {
public static void main(String[] args) {
System.out.println(20 >> 2);
}
}javaTähtis on märkida, et kui a on positiivne number, täidetakse tühikud numbriga 0. Kui see on negatiivne, asendatakse tühikud numbriga 1.
Parempoolne nihutus ilma märgita
Põhimõtteliselt toimib Java bitiviisiline operaator parempoolne nihutus ilma märgita (>>>) samamoodi. Ainus erinevus on see, et parempoolse nihutuse tulemusel vasakule tekkinud tühikud täidetakse alati nullidega. Selle tulemuseks on alati positiivne number, isegi kui algväärtus oli negatiivne. 4c5f986ec517d687f98f93f0abe2fb9b