Java definiše nekoliko operatora nad bitovima (engl. bitwise operators) koji se mogu primjeniti na cjelobrojne tipove, long, int, short, char i byte. Ovi operatori rade sa pojedinim bitovima svojih operanada. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Operandi aritmetičkih operatora moraju da budu numeričkog tipa. Ne mogu se primjeniti na podacima tipa boolean, ali mogu na podacima tipa char.
Logički operatori nad bitovima Logički operatori koji rade sa bitovima su &,|,^ i ~. U tabeli su prikazani rezultati svake operacije u kojoj se pojavljuju logički operatori.
|
Ilustracija rada logičkih operatora nad bitovima
Opis rješenja:Operatori | i & djeluju na promjenjive c i d, na ekranu ce se kao rezultat programa ispisati:
a | b = 0111
a & b = 0010
Vrijednosti dodjeljene promjenljivama e i f su iste i ilustruju efekat operatora ^:
a ^ b = 0101
~a & b | a & ~b = 0101
Primjenom konjukcije na vrijednost ~a ( da bi postala manja od 16), na ekranu se kao rezultat za vrijednost ~a & 0x0f ispisuje:
~a = 1100
Promjenljive a i b sa vrijednostima 3 i 6 za rezultat imaju vrijednosti:
a = 0011
b = 0110
Opis programa: Promjenljive a i b imaju takav raspored bitova da se između njih javljaju sve moguće kombinacije (0-0, 0-1, 1-0, 1-1).Tekstualni niz binarniBrojevi sadrži
razumljiv binarni prikaz brojeva od 0 do 15.Niz je indeksiran da bi se mogao prikazati svaki rezultat u binarnom obliku.Na vrijednost ~a prvo je primjenjena konjukcija sa 0x0f
da bi postala manja od 16 i da bi mogla biti prikazana u nizu binarniBrojevi.
Listing programa:
class BitLogike {
public static void main(String args[]) {
String binarni brojevi [] = {
"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"
};
int a = 3;
int b = 6;
int c = a | b;
int d = a & b;
int e = a ^ b;
int f = (~a & b) | (a & ~b);
int g = ~a & 0x0f;
System.out.println(" a = " + binarniBrojevi[a]);
System.out.println(" b = " + binarniBrojevi[b]);
System.out.println(" a|b = " + binarniBrojevi[c]);
System.out.println(" a&b = " + binarniBrojevi[d]);
System.out.println(" a^b = " + binarniBrojevi[e]);
System.out.println(" ~ a&b|a&~b = " + binarniBrojevi[f]);
System.out.println(" ~a = " + binarniBrojevi[g]);
}
}