Kas yra Java bitų operatoriai ir kaip juos naudoti
Naudodami Java bitų operatorius, galite manipuliuoti atskirais bitais bet kokiu būdu, kokiu norite. Septyni operatoriai yra struktūriškai panašūs ir veikia pagal lengvai išmokstamas taisykles.
Kas yra bitų operatoriai ir kam jie naudojami?
Java operatoriai yra svarbi priemonė dirbant su programavimo kalba. Be daugybės kitų galimybių ir funkcijų, jie suteikia galimybę manipuliuoti mažiausiais informacijos vienetais – bitais. Bitai (dvejetainiai skaitmenys) turi savo skaičių sistemą, pagrįstą reikšmėmis 0 ir 1. Jei norite užklausti dvejetaines reikšmes po bitą, jums reikės bitų operatorius Java. Jį galite taikyti skaitmeniniams duomenų tipams (byte, char, int, short, long).
Nors šios funkcijos nereikės kasdien, ji gali būti naudinga daugelyje situacijų. Pavyzdžiui, ji gali praversti, jei norite sutaupyti vietos konvertuodami duomenis, jei norite naudoti XOR operatorius arba jei tiesiog norite pakeisti bitą. Jos taip pat yra visų aukštesnių grandynų operacijų pagrindas. Todėl svarbu suprasti pagrindines Java bitų operatorių funkcijas.
Kokie yra Java bitų operatoriai?
Java kalboje yra iš viso septyni skirtingi bitiniai operatoriai. Norėdami visapusiškai suprasti, pradėsime nuo operandų a ir b.
- ~ (bitinis NE, papildinys): Šis operatorius apverčia bitus. 0 tampa 1, o 1 tampa 0.
- & (bitinis AND): Šis operatorius išveda 1, jei abu operandai yra 1. Kitais atvejais išvedamas 0.
- | (bitinis OR): Šis operatorius išveda 1, jei vienas iš dviejų operandų taip pat yra 1.
- ^ (XOR arba bitinis išskirtinis OR): Šis operatorius išveda 0, jei abu operandai turi tą pačią vertę. Kitais atvejais išveda 1.
- << (poslinkis į kairę): Šis operatorius poslinkio operandą a į kairę b pozicijų. Jei dėl to atsiranda tarpai, jie užpildomi 0.
- >> (dešinysis poslinkis su ženklu, aritmetinis): Šis operatorius perkelia visus a bitus b pozicijų į dešinę. Jei prieš vykdymą buvo nustatytas didžiausios vertės bitas, jis lieka nustatytas ir po vykdymo. Neigiami skaičiai lieka neigiami.
- >>>> (be ženklo perkelimas į dešinę, loginis): Šis operatorius perkelia a bitus į dešinę b pozicijų. Tarpai visada užpildomi 0.
Bitinis NE
Java bitų operatorius bitų NE yra žymimas tildės simboliu (~). Jis neigia visus bitus, paverčia nulius vienetais, o vienetus nuliais. Paimkime, pavyzdžiui, skaičių 20. Dvejetainėje sistemoje jis atrodo taip: 10100. Jei pritaikysime bitų operatorius NOT, kiekvienas skaičiaus bitas bus pakeistas: 10100 taps 01011. Tai yra išraiškos ~20 vertė. Jei šį dvejetainį skaičių konvertuosime atgal į dešimtainį skaičių, gausime vertę -21. Jei norite išbandyti šį procesą Java, įveskite šį kodą ir Java komandą System.out.println, kad gautumėte rezultatą.
public class Main {
public static void main(String[] args) {
int value1 = 20;
System.out.println(~value1);
}
}javaJei viską įvedėte teisingai, rezultatas turėtų būti „-21“.
Bitinis AND
Bitwise AND lygina du skaičius jų dvejetainėje formoje bitų po bito. Pirmasis pirmojo skaičiaus bitas lyginamas su antrojo skaičiaus pirmuoju bitu, antrasis – su antruoju bitu ir t. t. Jei abu bitai yra 1, išvedamas 1. Jei taip nėra (abu bitai yra 0 arba vienas iš bitų yra 0), išvedamas 0. Toliau pateiktame pavyzdyje pažiūrėsime į du dešimtainius skaičius 18 ir 25. Dvejetainis skaičius 18 yra 10010, o 25 dvejetainėje notacijoje yra 11001. Dabar palyginkime šiuos du skaičius ir iš jų nustatykime trečią skaičių.
18 = 10010 25 = 11001
Pirmieji du skaitmenų bitai yra 1, todėl galutinis skaičius taip pat prasideda 1. Antrasis 25 bitas taip pat yra 1, bet antrasis 18 bitas yra 0, todėl trečiojo skaičiaus skaitmuo yra 0. Peržiūrėję abu skaičius bitą po bito, gauname dvejetainį skaičių 10000. Jei jį konvertuosime į dešimtainį skaičių, rezultatas bus 16.
Kodas atrodo taip:
public class Main {
public static void main(String[] args) {
System.out.println(18&25);
}
}javaKonsolės išvestis turėtų būti 16.
Bitų OR
Java operatorius bitwise OR taip pat lygina du skaičius bitų po bito. Tačiau šiuo atveju tik vienas iš dviejų operandų turi turėti vertę 1, kad rezultatas būtų 1. Jei paimsime skaičius iš ankstesnio pavyzdžio, tai atrodys taip:
18 = 10010 25 = 11001
Kadangi visi bitai, išskyrus trečiąjį skaitmenį, turi bent vieną 1, galutinis skaičius yra: 11011. Konvertavus gauname 27.
Štai kaip šis pavyzdys atrodo kode:
public class Main {
public static void main(String[] args) {
System.out.println(18|25);
}
}javaXOR
XOR arba bitinis išskirtinis OR (^) yra panašus į bitinį OR. Bitinio OR atveju, norint gauti rezultatą 1, vienas arba abu operandai turi būti 1. Tačiau XOR atveju rezultatas 1 gaunamas tik tada, jei tik vienas iš dviejų verčių yra 1. Norėdami geriau suprasti, kaip veikia XOR, pažiūrėkime pavyzdį:
18 = 10010 25 = 11001
Pirmieji du bitai turi vertę 1, todėl naudojant šį bitų operatorius Java kalboje rezultatas yra 0. Antrasis 18 bitas yra 0, bet antrasis 25 bitas yra 1. Tai duoda vertę 1. Jei tęsiame toliau, gauname skaičių 01011. Dešimtainėje formoje tai yra 11.
Čia yra kodas:
public class Main {
public static void main(String[] args) {
System.out.println(18^25);
}
}javaKairinis poslinkis
Kairinis poslinkis perkelia vertės a bitus į kairę atstumu b. Susidariusios tuščios vietos užpildomos 0. Tai aiškiai iliustruoja int vertė, užimanti 32 bitus atmintyje. Paimkime vėl skaičių 20 arba 10010 ir perkelkime j į b verte 2, kad gautume c vertę 1001000. Gale įrašomi du nuliai. 1001000 atitinka dešimtainę vertę 72.
Štai kaip šis procesas atrodo kode:
public class Main {
public static void main(String[] args) {
int a = 20;
int b = 2;
int c = (a << b);
System.out.println(c);
}
}javaDešiniuoju klavišu su ženklu
Dešiniasis poslinkis veikia atvirkščiai. Čia vertės a bitai yra poslinkiami į dešinę vertės b dydžiu, taip gaunant vertę c. Dėl to paskutiniai bitai yra praleidžiami. Jei poslinkiame 20 arba 10010 dviem vietomis į dešinę, rezultatas yra 100 arba 4.
Čia yra kodas:
public class Main {
public static void main(String[] args) {
System.out.println(20 >> 2);
}
}javaSvarbu atkreipti dėmesį, kad jei a yra teigiamas skaičius, tarpai užpildomi 0. Jei jis yra neigiamas, tarpai pakeičiami 1.
Dešiniasis poslinkis be ženklo
Iš esmės, Java bitų operatorius dešiniuoju poslinkiu be ženklo (>>>) veikia taip pat. Vienintelis skirtumas yra tas, kad dešiniuoju poslinkiu kairėje pusėje susidariusios erdvės visada užpildomos 0. Tai visada duoda teigiamą skaičių, net jei pradinė vertė buvo neigiama. 4c5f986ec517d687f98f93f0abe2fb9b