Zielony Smok - logo witryny

Operacje na pojedynczych bitach (Java)

Włączanie bitu

Aby włączyć bity używamy operatora sumy bitowej |.

Używamy zapisu:

x = x | maska albo

x |= maska

Tam, gdzie maska ma 0, wartości pozostają te same. Tam, gdzie maska ma 1, bity zerowe zmienią się na 1 (zostaną
włączone), a bity 1 pozostaną.

W poniższym przykładzie włączamy bit 4 (BinAria06.java):

    int rgb = 167;
    System.out.println(Integer.toBinaryString(rgb));
    int maska = 8;
    System.out.println(Integer.toBinaryString(maska));
    int wynik1 = rgb | maska;
    System.out.println(Integer.toBinaryString(wynik1));

Po uruchomieniu na konsoli zobaczymy:

10100111
1000
10101111

jak widzimy czwarty bit od prawej został wyłączony.

Wyłączenie bitu

Aby wyłączyć bit używamy konstrukcji wykorzystujące negację i koniunkcję binarną:

x = x & ~maska albo

x &= ~maska

W poniższym kodzie (BinAria07.java) wyłączymy czwarty bit od prawej, który w poprzednim przykładzie został włączony.

       //włączenie bitu
        int rgb = 167;
        System.out.println(Integer.toBinaryString(rgb));
        int maska = 8;
        System.out.println(Integer.toBinaryString(maska));
        int wynik1 = rgb | maska;
        System.out.println(Integer.toBinaryString(wynik1));
        //-wyłączenie bitu
        int wynik2 = rgb & ~maska;
        System.out.println(Integer.toBinaryString(wynik2));

Po uruchomieniu kodu na konsoli zobaczymy:

10100111
1000
10101111
10100111

Odwrócenie bitu

odwrócenie bitu można uzyskać stosując konstrukcję:

x = x ^ maska albo

x ^= maska

W wyniku zastosowania maski, tam gdzie maska ma 0, wartości pozostaną niezmienione, a tam gdzie maska ma 1, zostaną odwrócone.

W poniższym przykładzie (BinAria08.java) odwracamy bit trzeci od prawej:

        //włączenie bitu
        int rgb = 167;
        System.out.println(Integer.toBinaryString(rgb));
        //odwrócenie bitu
        int maska1 = 4;
        System.out.println(Integer.toBinaryString(maska1));
        int wynik3 = rgb ^ maska1;
        System.out.println(Integer.toBinaryString(wynik3));

Po uruchomieniu tego kodu na konsoli zobaczymy:

10100111
100
10100011

Sprawdzenie wartości bitu

Sprawdzenie wartości bitu wykonujemy we wcześniej opisany sposób Sprawdzanie
parzystości Java

Przykład (Binaria09.java) – wykorzystuję tu warunek if oraz pokazuję to samo przy użyciu operatora
trójargumentowego

        //włączenie bitu
        int rgb = 167;
        System.out.println(Integer.toBinaryString(rgb));
        //sprawdzenie wartości bitu
        int maska4 = 4;
        System.out.println(Integer.toBinaryString(maska4));
        int wynik4;
        if ((rgb & maska4) == maska4) {
            wynik4 = 1;
        } else {
            wynik4 = 0;
        }
        System.out.println(wynik4);
        //operator trojargumentowy
        int wynik5 = (rgb & maska4) == maska4 ? 1 : 0;
        System.out.println(wynik5);

Po uruchomieniu kodu na konsoli zobaczymy:

10100111
100
1
1

Ustawienie maski

nr bitu, na którym
chcemy wykonać
operację
wartość
maski
1 1
2 2
3 4
4 8
5 16
6 32
7 64
8 128

Jeśli chcemy w masce użyć więcej niż jedną jedynkę wartości z tabeli dodajemy. Suma wartości (255)10 = (11111111)2.