# 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.
- **&amp; (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.
- **&lt;&lt; (poslinkis į kairę)**: Šis operatorius poslinkio operandą *a* į kairę *b* pozicijų. Jei dėl to atsiranda tarpai, jie užpildomi 0.
- **&gt;&gt; (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.
- **&gt;&gt;&gt;&gt; (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ą.

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

Jei 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:

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

Konsolė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:

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

## XOR

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:

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

## Kairinis 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:

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

## Deš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:

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

Svarbu 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 (&gt;&gt;&gt;) 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.


This is a markdown version of: [https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/java-bitu-operatoriai/](https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/java-bitu-operatoriai/) for AI/LLM consumption.