Naudodami Java bitų ope­ra­to­rius, galite ma­ni­pu­liuo­ti atskirais bitais bet kokiu būdu, kokiu norite. Septyni ope­ra­to­riai yra struk­tū­riš­kai panašūs ir veikia pagal lengvai iš­moks­ta­mas taisykles.

Kas yra bitų ope­ra­to­riai ir kam jie naudojami?

Java ope­ra­to­riai yra svarbi priemonė dirbant su prog­ra­ma­vi­mo kalba. Be daugybės kitų galimybių ir funkcijų, jie suteikia galimybę ma­ni­pu­liuo­ti ma­žiau­siais in­for­ma­ci­jos vienetais – bitais. Bitai (dve­je­tai­niai skait­me­nys) turi savo skaičių sistemą, pagrįstą reikš­mė­mis 0 ir 1. Jei norite užklausti dve­je­tai­nes reikšmes po bitą, jums reikės bitų ope­ra­to­rius Java. Jį galite taikyti skait­me­ni­niams duomenų tipams (byte, char, int, short, long).

Nors šios funkcijos nereikės kasdien, ji gali būti naudinga daugelyje situacijų. Pa­vyz­džiui, ji gali praversti, jei norite sutaupyti vietos kon­ver­tuo­da­mi duomenis, jei norite naudoti XOR ope­ra­to­rius arba jei tiesiog norite pakeisti bitą. Jos taip pat yra visų aukš­tes­nių grandynų operacijų pagrindas. Todėl svarbu suprasti pag­rin­di­nes Java bitų ope­ra­to­rių funkcijas.

Kokie yra Java bitų ope­ra­to­riai?

Java kalboje yra iš viso septyni skirtingi bitiniai ope­ra­to­riai. Norėdami vi­sa­pu­siš­kai suprasti, pradėsime nuo operandų a ir b.

  • ~ (bitinis NE, pa­pil­di­nys): Šis ope­ra­to­rius apverčia bitus. 0 tampa 1, o 1 tampa 0.
  • & (bitinis AND): Šis ope­ra­to­rius išveda 1, jei abu operandai yra 1. Kitais atvejais išvedamas 0.
  • | (bitinis OR): Šis ope­ra­to­rius išveda 1, jei vienas iš dviejų operandų taip pat yra 1.
  • ^ (XOR arba bitinis iš­skir­ti­nis OR): Šis ope­ra­to­rius išveda 0, jei abu operandai turi tą pačią vertę. Kitais atvejais išveda 1.
  • << (poslinkis į kairę): Šis ope­ra­to­rius poslinkio operandą a į kairę b pozicijų. Jei dėl to atsiranda tarpai, jie užpildomi 0.
  • >> (dešinysis poslinkis su ženklu, arit­me­ti­nis): Šis ope­ra­to­rius perkelia visus a bitus b pozicijų į dešinę. Jei prieš vykdymą buvo nu­sta­ty­tas di­džiau­sios vertės bitas, jis lieka nu­sta­ty­tas ir po vykdymo. Neigiami skaičiai lieka neigiami.
  • >>>> (be ženklo per­ke­li­mas į dešinę, loginis): Šis ope­ra­to­rius perkelia a bitus į dešinę b pozicijų. Tarpai visada užpildomi 0.

Bitinis NE

Java bitų ope­ra­to­rius bitų NE yra žymimas tildės simboliu (~). Jis neigia visus bitus, paverčia nulius vienetais, o vienetus nuliais. Paimkime, pa­vyz­džiui, skaičių 20. Dve­je­tai­nė­je sistemoje jis atrodo taip: 10100. Jei pri­tai­ky­si­me bitų ope­ra­to­rius NOT, kiek­vie­nas skaičiaus bitas bus pakeistas: 10100 taps 01011. Tai yra išraiškos ~20 vertė. Jei šį dve­je­tai­nį skaičių kon­ver­tuo­si­me atgal į de­šim­tai­nį 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);
}
}
java

Jei viską įvedėte teisingai, re­zul­ta­tas turėtų būti „-21“.

Bitinis AND

Bitwise AND lygina du skaičius jų dve­je­tai­nė­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 pa­teik­ta­me pavyzdyje pa­žiū­rė­si­me į du de­šim­tai­nius skaičius 18 ir 25. Dve­je­tai­nis skaičius 18 yra 10010, o 25 dve­je­tai­nė­je no­ta­ci­jo­je yra 11001. Dabar pa­ly­gin­ki­me šiuos du skaičius ir iš jų nu­sta­ty­ki­me 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 dve­je­tai­nį skaičių 10000. Jei jį kon­ver­tuo­si­me į de­šim­tai­nį skaičių, re­zul­ta­tas bus 16.

Kodas atrodo taip:

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

Konsolės išvestis turėtų būti 16.

Bitų OR

Java ope­ra­to­rius 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 re­zul­ta­tas būtų 1. Jei paimsime skaičius iš anks­tes­nio 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. Kon­ver­ta­vus gauname 27.

Štai kaip šis pavyzdys atrodo kode:

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

XOR

XOR arba bitinis iš­skir­ti­nis 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 re­zul­ta­tas 1 gaunamas tik tada, jei tik vienas iš dviejų verčių yra 1. Norėdami geriau suprasti, kaip veikia XOR, pa­žiū­rė­ki­me pavyzdį:

18 = 10010 25 = 11001

Pirmieji du bitai turi vertę 1, todėl naudojant šį bitų ope­ra­to­rius Java kalboje re­zul­ta­tas 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­šim­tai­nė­je formoje tai yra 11.

Čia yra kodas:

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

Kairinis poslinkis

Kairinis poslinkis perkelia vertės a bitus į kairę atstumu b. Su­si­da­riu­sios tuščios vietos už­pil­do­mos 0. Tai aiškiai iliust­ruo­ja int vertė, užimanti 32 bitus atmintyje. Paimkime vėl skaičių 20 arba 10010 ir per­kel­ki­me j į b verte 2, kad gautume c vertę 1001000. Gale įrašomi du nuliai. 1001000 atitinka de­šim­tai­nę 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);
}
}
java

De­ši­niuo­ju klavišu su ženklu

De­ši­nia­sis poslinkis veikia at­virkš­čiai. Čia vertės a bitai yra po­s­lin­kia­mi į dešinę vertės b dydžiu, taip gaunant vertę c. Dėl to pas­ku­ti­niai bitai yra pra­lei­džia­mi. Jei po­s­lin­kia­me 20 arba 10010 dviem vietomis į dešinę, re­zul­ta­tas yra 100 arba 4.

Čia yra kodas:

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

Svarbu atkreipti dėmesį, kad jei a yra teigiamas skaičius, tarpai užpildomi 0. Jei jis yra neigiamas, tarpai pa­kei­čia­mi 1.

De­ši­nia­sis poslinkis be ženklo

Iš esmės, Java bitų ope­ra­to­rius de­ši­niuo­ju poslinkiu be ženklo (>>>) veikia taip pat. Vie­nin­te­lis skirtumas yra tas, kad de­ši­niuo­ju poslinkiu kairėje pusėje su­si­da­riu­sios erdvės visada už­pil­do­mos 0. Tai visada duoda teigiamą skaičių, net jei pradinė vertė buvo neigiama. 4c5f986ec517d687f98f93f0abe2fb9b

Go to Main Menu