Zielony Smok - logo witryny

BigInteger (4) – operacje bitowe

BigInteger and(BigInteger val)

Wykonuje koniunkcję kolejnych bitów this & val.

BigInteger andNot(BigInteger val)

Wykonuje zaprzeczenie ~val, a następnie wykonuje koniunkcję this & ~val.

int bitCount()

Zwraca liczbę bitów w this przedstawionej w kodzie uzupełnień do 2, które różnią się od bitu znaku.

int bitLength()

Zwraca liczbę bitów this przedstawionej w kodzie uzupełnień do 2 bez uwzględnienia bitu znaku.

BigIntegr clearBit(int n)

Wykonuje operację this & ~(1<<n).

Mamy liczbę: -17 binarnie: 11101111

Wykonujemy operację: clearBit(2), czyli:

1<<2 = 4 binarnie 00000100
~4 = -5 binarnie    11111011
Koniunkcja:
11101111
11111011
--------
11101011 = 235 = -21 w kodzie uzupełnień do 2
Klasa BigInt13.java
BigInteger a = new BigInteger("-17");
Util.print(a);
BigInteger b = a.clearBit(2);
Util.print(b);
Util.print(Integer.parseInt("11101011", 2));
Util.print(-17 & (~(1 << 2)));

A oto wynik:

-17
-21
235
-21
BigInteger flipBit(int n)

Zamienia bit. Jeśli jest 0 wstawia 1, jeśli jest 1 wstawia 0.

Flipujemy 2 bit w liczbie -17.

BigInteger a1 = new BigInteger("-17");
Util.print(a1);
Util.print(a1.toString(2));
BigInteger b1 = a.flipBit(2);
Util.print(b1);
Util.print(b1.toString(2));

Na konsoli otrzymujemy:

-17
-10001
-21
-10101
int getLowestSetBit()

Zwraca liczbę zer od prawej strony do pierwszej jedynki, która wystąpi.

BigInteger negate()

Zwraca liczbę -this.

BigInteger not()

Wykonuje zaprzeczenie ~val.

BigInteger or(BitInteger val)

Wykonuje alternatywę this | val.

BitInteger setBit(int)

Ustawia bit n.

Mamy liczbę -19, binarnie 11101101

Wykonujemy ustawienie 4 bitu, czyli operację:

this | (1<<n)

1<<4 = 16, binarnie 00001000
wykonujemy alternatywę:
11101101
00001000
------------
11101101 = 237, czyli -19 w kodzie uzupełnień do 2. Wynik się nie zmienił.
Util.print(Integer.parseInt("11101101", 2));

Na konsoli otrzymujemy:

237
-19
BigInteger shiftLeft(int n)

Wykonuje operację this << n.

BigInteger shiftRight(int n)

Wykonuje operację n >> this.

boolean testBit(int n)

Sprawdza czy bit jest ustawiony. Zwraca true jeśli tak, false w przeciwnym wypadku.

Wykonuje operację

(this & (1<<n))!=0)

Mamy liczbę: -17 binarnie: 11101111

wykonujemy operację: testBit(2), czyli:

1<<2 = 4 binarnie 00000100
Koniunkcja:
11101111
00000100
--------
11101111
Liczba jest większa od zera. Metoda zwróci true.
BigInteger a2 = new BigInteger("-17");
Util.print(a2);
boolean b2 = a2.testBit(2);
Util.print(b2);

Na konsoli otrzymamy:

-17
true
BigInteger xor(BitInteger val)

Wykonuje operację różnicy symetryczne this^val.