4.2 OPERATORI NAD BITOVIMA

                             

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.

Operator

Rezultat

~

Negacija nad bitovima jednog od operanda (NOT)

&

Konjukcija nad bitovima (AND)

|

Disjunkcija nad bitovima (OR)

^

Isključiva disjunkcija nad bitovima (XOR)

>>

Pomjeranje udesno

>>>

Pomjeranje udesno sa unošenjem nula

<<

Pomjeranje ulijevo

&=

Dodjeljivanje uz konjukciju nad bitovima

|=

Dodjeljivanje uz disjunkciju nad bitovima

^=

Dodjeljivanje uz isključivu disjunkciju nad bitovima

>>=

Dodjeljivanje uz pomjeranje udesno

>>>=

Dodjeljivanje uz pomjeranje udesno sa unošenjem nula

<<=

Dodjeljivanje uz pomjeranje ulijevo

 

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.

A

B

A|B

A&B

A^B

~A

0

0

0

0

0

1

1

0

1

0

1

0

0

1

1

0

1

1

1

1

1

1

0

0

 

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]);

    }  

}