
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.
