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, fals
e 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
.