Uvod u manipulaciju bitima
Obično programer radi na varijablama vrsta podataka kao što su int, float, double, String ili zbirke poput Array, List, ArrayList i tako dalje. U nekim slučajevima, programeri moraju ući mnogo dublje u podatke na bajtu i na razini bita kako bi izvukli i manipulirali podacima. Jezici kao što su Java i C # omogućuju vam manipuliranje podacima na razini bita, što znači da imate pristup određenom bitu u bajtu. U ovoj ćemo temi naučiti o Manipulaciji Bit-a na Javi.
Manipulacija bita često se zahtijeva pri radu na Kompresiji podataka i Šifriranju podataka gdje programer mora izvući podatke na razini bita kako bi kodirao, dekodirao ili komprimirao izvorne podatke. Postoje mnoge druge aplikacije Bit manipulacije koje ćemo vidjeti kasnije u ovom članku.
Java podržava 3-bitni pomak i 4 bitna operatera za izvođenje operacija na razini bita. Ovi se operateri mogu koristiti na integralnim tipovima (int, short, long i byte) za izvođenje operacija na razini bita.
Operatori Java Bitwise i Bitshift
Operater | Opis |
& | Bitwise I |
| | Bitno ILI |
~ | Bitni dodatak |
<< | Lijeva smjena |
>> | Desna smjena |
^ | Bitno XOR |
>>> | Nepodpisan desni pomak |
Operatori manipulacije bitima na Javi
pogledajmo operatore detaljnije
1) Bitno ILI
Ovo je binarni operator koji uzima 2 operanda i označen je simbolom "| „. Operator bitisa uspoređuje odgovarajuće bitove dvaju operanda. Ako je bilo koji od operandova bita 1, tada je izlaz 1, ako ne, bit će 0.
Primjer
15 = 00001111 (In Binary)
27 = 00011011 (In Binary)
Bitwise OR Operation of 15 and 27
00001111
| 00011011
________
00011111 = 31 (In decimal)
Java program
class BitwiseOR (
public static void main(String() args) (
int operand1 = 15, operand2 = 27, output
output= operand1 | operand2;
System.out.println(output);
)
)
Izlaz: 31
2) Bitwise I
Ovo je također bitni operator koji uzima 2 operanda i označen je simbolom “&”. operater bitova uspoređuje odgovarajuće bitove dvaju operanda. Ako su oba boda operenda 1, tada je izlaz 1, a 0.
Primjer
15 = 00001111 (In Binary)
27 = 00011011 (In Binary)
Bitwise AND Operation of 15 and 27
00001111
| 00011011
________
00001011 = 11 (In decimal)
Java program
class BitwiseAND (
public static void main(String() args) (
int operand1 = 15, operand2 = 27, output
output= operand1 & operand2;
System.out.println(output);
)
)
Izlaz: 11
3) Bitni dopuna
Za razliku od druga dva operatora o kojima smo do sada razgovarali, ovaj ima samo jedan operand i označen je simbolom "~". Ovaj operator invertira bit operanda. Ako je bit operanda 0, tada ga pretvara u 1 i obrnuto.
Primjer
15 = 00001111 (In Binary)
Bitwise complement Operation of 15
~ 00001111
________
11110000 = 240 (In decimal)
Java program
class BitwiseComplement (
public static void main(String() args) (
int operand= 15, output;
output= ~operand;
System.out.println(output);
)
)
Izlaz: -16
Napomena: kada pokrenete program Java, dobit ćete -16 kao izlaz umjesto 240, jer prevoditelj prikazuje 2 komplementa tog broja, tj. Negativan pojam binarnog broja.
2 dopunjavanje bilo kojeg broja ekvivalentno je - (n + 1) gdje je n broj čigava 2 komplementa treba izračunati. U našem slučaju 2 komplementa operanda 15 je -16 što je i izlaz programa.
4) Bitwise XOR
Bitwise XOR je binarni operator koji uzima 2 operanda i označava se simbolom "^". ovaj operator uspoređuje odgovarajuće bitove dvaju operanda. Ako su odgovarajući bitovi dvaju operanda različiti, on daje 1 kao izlaz ostatak 0.
Bitwise XOR operator je ekvivalentan (Bitwise OR + Bitwise Complement)
Primjer
15 = 00001111 (In Binary)
27 = 00011011 (In Binary)
Bitwise XOR Operation of 15 and 27
00001111
00011011
________
00010100 = 20 (In decimal)
Java program
class BitwiseXor (
public static void main(String() args) (
int operand1= 15, operand2 = 27, output;
output = operand1 operand2;
System.out.println(output);
)
)
Izlaz: 20
5) Potpisan pomak lijevo
Lijevi operator pomaka po pomaku pomiče uzorak bita ulijevo za određeni broj puta navedenih u operandu. Lijevi operator pomicanja označen je simbolom "<<".
Primjer
123 (In binary: 01111011)
123 << 1 evaluates to 246 (In binary: 011110110)
123 << 2 evaluates to 492 (In binary: 0111101100)
123 << 3 evaluates to 984 (In binary:01111011000)
Java program
class LeftShiftOperator (
public static void main(String() args) (
int operand = 123;
System.out.println(operand << 1);
System.out.println(operand << 2);
System.out.println(operand << 3);
)
)
izlaz: 246, 492, 984
6) Potpisan pomak desno
Potpisani operator desne promjene djeluje potpuno isto kao i operator lijeve smjene samo što dodaje nula bita pomaknuto je u položaj visokog reda.
Primjer
123 (In binary: 01111011)
123 >> 1 evaluates to 61 (In binary: 00111101)
123 >> 2 evaluates to 30 (In binary: 00011110)
123 >> 3 evaluates to 15 (In binary:00001111)
Java program
class RightShiftOperator (
public static void main(String() args) (
int operand = 123;
System.out.println(operand >> 1);
System.out.println(operand >> 2);
System.out.println(operand >> 3);
)
)
Izlaz: 61, 30, 15
7) Nepodpisan desni pomak
Operater desnog pomaka pomiče nulu u krajnji lijevi položaj za određeni broj bitova navedenih u operandu.
Java program
class UnSignedRightShiftOperator (
public static void main(String() args) (
int operand = 123;
System.out.println(operand >>> 1);
System.out.println(operand >>> 2);
System.out.println(operand >>> 3);
)
)
Izlaz : 61, 30, 15
Zaključak - Manipulacija bitima na Javi
Sada kada smo stigli do kraja članka, završimo sažeto rezimirajući ključnu točku o kojoj smo razgovarali u ovom članku. Vidjeli smo što je pomalo manipulacija i njezini različiti slučajevi upotrebe. Također smo naučili različite tipove bitnostranih operatora (Bitwise AND, Bitwise ILO, Bitwise Complement i Bitwise XOR) i operatera pomaka u bitni (Signed Left Shift operator, potpisan Right Shift Operator i nepotpisani Right shift operateri), uz primjer i uzorak Java program koji objašnjava pojedine operatore.
Preporučeni članci
Ovo je vodič za manipulaciju bitima na Javi. Ovdje detaljno raspravljamo o Javnim bitnim i Bitshift operaterima s primjerima i Java programima i njihovim izlazima. Možete pogledati i sljedeći članak da biste saznali više -
- Što je Java sučelje?
- Java alati
- Okviri Python-a
- Booleovi operateri na Javi