Kas ir Java bitu operatori un kā tos lietot
Ar Java bitu operatoriem varat manipulēt ar atsevišķiem bitiem jebkādā veidā, kā vēlaties. Septiņi operatori ir strukturēti līdzīgi un atbilst fiksētiem noteikumiem, kas ir viegli apgūstami.
Kas ir bitu operatori un kādiem nolūkiem tie tiek izmantoti?
Java operatori ir svarīgs instruments, strādājot ar programmēšanas valodu. Papildus daudzām citām iespējām un funkcijām, tie piedāvā iespēju manipulēt ar vismazākajām iespējamajām informācijas vienībām: bitiem. Bitiem (binārajiem cipariem) ir sava skaitļu sistēma, kas balstās uz vērtībām 0 un 1. Ja vēlaties pieprasīt binārās vērtības pa bitam, jums ir nepieciešams bitu operators Java. To var piemērot skaitliskajiem datu tipiem (byte, char, int, short, long).
Lai gan šī funkcija nav nepieciešama ikdienā, tā var būt noderīga daudzās situācijās. Piemēram, tā var noderēt, ja vēlaties ietaupīt vietu, konvertējot datus, ja vēlaties izmantot XOR operatoru vai ja vienkārši vēlaties mainīt bitu. Tās ir arī pamats visām augstākajām shēmu operācijām. Tāpēc ir svarīgi izprast Java bitu operatoru pamatfunkcijas.
Kādi ir Java bitu operatori?
Java valodā kopumā ir septiņi dažādi bitu operatori. Lai iegūtu vispusīgu izpratni, sāksim ar operandiem a un b.
- ~ (bitu NOT, komplementārs): Šis operators apgriež bitu vērtības. 0 kļūst par 1, bet 1 kļūst par 0.
- & (bitu AND): Šis operators izvada 1, ja abi operandi ir 1. Pretējā gadījumā tiek izvadīts 0.
- | (bitu OR): Šis operators izvada 1, ja viens no diviem operandiem ir 1.
- ^ (XOR vai bitu ekskluzīvais OR): Šis operators izvada 0, ja abiem operandiem ir vienāda vērtība. Pretējā gadījumā tas izvada 1.
- << (pa kreisi): Šis operators pārvieto operandu a pa kreisi par b pozīcijām. Ja rezultātā rodas atstarpes, tās tiek aizpildītas ar 0.
- >> (labais nobīde ar zīmi, aritmētiska): Šis operators nobīda visus a bitu par b pozīcijām pa labi. Ja bits ar augstāko vērtību tika iestatīts pirms izpildes, tas paliek iestatīts arī pēc izpildes. Negatīvie skaitļi paliek negatīvi.
- >>>> (nesignēta pārvietošana pa labi, loģiska): Šis operators pārvieto a bitu pa labi par b pozīcijām. Atstarpes vienmēr aizpilda ar 0.
Bitu NOT
Java bitu operators bitu NOT tiek attēlots ar tildu (~). Tas noliedz visus bitus, pārvēršot nulles par vieniniekiem un vieniniekus par nulles. Ņemsim, piemēram, skaitli 20. Binārā formātā tas izskatās šādi: 10100. Ja piemērojam bitu operatoru NOT, visi skaitļa biti tiks apmainīti: 10100 kļūst par 01011. Šī ir izteiksmes ~20 vērtība. Ja šo bināro skaitli atkal pārvēršam decimālajā skaitlī, iegūstam vērtību -21. Ja vēlaties izmēģināt šo procesu Java, ievadiet šādu kodu un Java komandu System.out.println, lai izvadītu rezultātu.
public class Main {
public static void main(String[] args) {
int value1 = 20;
System.out.println(~value1);
}
}javaJa esat ievadījis visu pareizi, izvadei jābūt “-21”.
Bitu AND
Bitwise AND salīdzina divus skaitļus to binārā formā bitu pa bitam. Pirmā skaitļa pirmais bits tiek salīdzināts ar otrā skaitļa pirmo bitu, otrais ar otro bitu un tā tālāk. Ja abi biti ir 1, tiek izvadīts 1. Ja tas tā nav (abi biti ir 0 vai viens no bitiem ir 0), tiek izvadīts 0. Zemāk redzamajā piemērā apskatīsim divus decimālos skaitļus 18 un 25. Binārā formā 18 ir 10010, bet 25 binārā formā ir 11001. Tagad salīdzināsim šos divus skaitļus un noteiksime no tiem trešo skaitli.
18 = 10010 25 = 11001
Pirmie divi biti skaitļos ir abi 1, tāpēc rezultātā iegūtais skaitlis arī sākas ar 1. Otrais bits skaitlī 25 arī ir 1, bet otrais bits skaitlī 18 ir 0, tāpēc trešā skaitļa cipars ir 0. Pēc abu skaitļu bitu pa bitam pārbaudes iegūstam bināro skaitli 10000. Ja to pārvēršam decimālskaitlī, rezultāts būs 16.
Kods izskatās šādi:
public class Main {
public static void main(String[] args) {
System.out.println(18&25);
}
}javaKonsoles izvadei jābūt 16.
Bitu OR
Java operators bitwise OR arī salīdzina divus skaitļus bitu pa bitam. Tomēr šajā gadījumā tikai vienam no diviem operandiem ir jābūt vērtībai 1, lai rezultāts būtu 1. Ja izmantojam skaitļus no iepriekšējā piemēra, tas izskatīsies šādi:
18 = 10010 25 = 11001
Tā kā visi biti, izņemot trešo ciparu, satur vismaz vienu 1, rezultātā iegūstam skaitli: 11011. Pārrēķinot, iegūstam 27.
Šeit ir redzams, kā šis piemērs izskatās kodā:
public class Main {
public static void main(String[] args) {
System.out.println(18|25);
}
}javaXOR
XOR jeb bitu ekskluzīvais vai (^) ir līdzīgs bitu vai. Bitu vai gadījumā vienam vai abiem operandiem jābūt 1, lai izvade būtu 1. Tomēr XOR gadījumā 1 tiek izvadīts tikai tad, ja tieši viena no divām vērtībām ir 1. Lai labāk izprastu, kā darbojas XOR, aplūkosim piemēru:
18 = 10010 25 = 11001
Pirmie divi biti ir ar vērtību 1, tādēļ, izmantojot šo bitu operatoru Java valodā, rezultāts ir 0. Otrais bits no 18 ir 0, bet otrais bits no 25 ir 1. Rezultāts ir vērtība 1. Turpinot, iegūstam skaitli 01011. Decimālajā formā tas ir 11.
Šeit ir kods:
public class Main {
public static void main(String[] args) {
System.out.println(18^25);
}
}javaPāreja pa kreisi
Pārvietojot pa kreisi, vērtības a biti tiek pārvietoti pa kreisi par attālumu b. Rezultātā radušās tukšās vietas tiek aizpildītas ar 0. To skaidri ilustrē int vērtība, kas atmiņā aizņem 32 bitus. Ņemsim atkal skaitli 20 vai 10010 un pārvietosim to par b vērtību 2, lai iegūtu c vērtību 1001000. Beigās tiek ievietoti divi nulles. 1001000 atbilst decimālajai vērtībai 72.
Šeit ir redzams, kā šis process izskatās kodā:
public class Main {
public static void main(String[] args) {
int a = 20;
int b = 2;
int c = (a << b);
System.out.println(c);
}
}javaPārvietošana pa labi ar zīmi
Labais nobīdījums darbojas pretēji. Šajā gadījumā vērtības a biti tiek nobīdīti pa labi par vērtību b, kas rada c vērtību. Rezultātā pēdējie biti tiek izlaisti. Ja mēs nobīdām 20 vai 10010 divas vietas pa labi, rezultāts ir 100 vai 4.
Šeit ir kods:
public class Main {
public static void main(String[] args) {
System.out.println(20 >> 2);
}
}javaSvarīgi atzīmēt, ka, ja a ir pozitīvs skaitlis, atstarpes tiek aizpildītas ar 0. Ja tas ir negatīvs, atstarpes tiek aizstātas ar 1.
Pārvietošana pa labi bez zīmes
Principā Java bitu operators labais nobīdījums bez zīmes (>>>) darbojas tāpat. Vienīgā atšķirība ir tā, ka telpas, kas izveidojas kreisajā pusē, nobīdoties pa labi, vienmēr tiek aizpildītas ar 0. Tas vienmēr rada pozitīvu skaitli, pat ja sākotnējā vērtība bija negatīva. 4c5f986ec517d687f98f93f0abe2fb9b
e147393cf30084fd4e831d7848643eb9