Operacje Kotlin Bitwise i Bitshift (z przykładami)

Kotlin udostępnia kilka funkcji (w postaci wrostków) do wykonywania operacji bitowych i przesunięć bitowych. W tym artykule nauczysz się wykonywać operacje na poziomie bitowym w Kotlinie za pomocą przykładów.

Operatory przesunięcia bitowego i bitowego są używane tylko na dwóch typach całkowitych ( Inti Long) do wykonywania operacji na poziomie bitowym.

Aby wykonać te operacje, Kotlin zapewnia 7 funkcji wykorzystujących notację wrostkową.

1. lub

orFunkcja porównuje odpowiednie bity obu wartości. Jeśli którykolwiek z bitów ma wartość 1, daje 1. Jeśli nie, daje 0. Na przykład

 12 = 00001100 (binarnie) 25 = 00011001 (binarnie) Bitowo LUB Operacja 12 i 25 00001100 lub 00011001 ________ 00011101 = 29 (dziesiętnie)

Przykład: Bitwise lub Operation

 fun main(args: Array) ( val number1 = 12 val number2 = 25 val result: Int result = number1 or number2 // result = number1.or(number2) println(result) )

Po uruchomieniu programu wynik będzie następujący:

 29

2. i

andFunkcja porównuje odpowiednie bity obu wartości. Jeśli oba bity mają wartość 1, jest szacowany na 1. Jeśli którykolwiek z bitów ma wartość 0, jest szacowany na 0. Na przykład

 12 = 00001100 (binarnie) 25 = 00011001 (binarnie) Operacja bitowa na 12 i 25 00001100 i 00011001 ________ 00001000 = 8 (dziesiętnie)

Przykład: bitowe i operacja

 fun main(args: Array) ( val number1 = 12 val number2 = 25 val result: Int result = number1 and number2 // result = number1.and(number2) println(result) )

Po uruchomieniu programu wynik będzie następujący:

 8

3. xor

xorFunkcja porównuje odpowiednie bity obu wartości. Jeśli odpowiadające sobie bity są różne, daje 1. Jeśli odpowiadające im bity są takie same, daje 0. Na przykład

 12 = 00001100 (binarnie) 25 = 00011001 (binarnie) Bitowo LUB Operacja 12 i 25 00001100 xor 00011001 ________ 00010101 = 21 (dziesiętnie)

Przykład: operacja bitowa xor

 fun main(args: Array) ( val number1 = 12 val number2 = 25 val result: Int result = number1 xor number2 // result = number1.xor(number2) println(result) )

Po uruchomieniu programu wynik będzie następujący:

 21

4. inv ()

Funkcja inv () odwraca wzór bitowy. Tworzy co 0 do 1 i co 1 do 0.

 35 = 00100011 (binarnie) Uzupełnienie bitowe Operacja 35 00100011 ________ 11011100 = 220 (dziesiętnie)

Przykład: dopełnienie bitowe

 fun main(args: Array) ( val number = 35 val result: Int result = number.inv() println(result) )

Po uruchomieniu programu wynik będzie następujący:

 -36

Dlaczego otrzymujemy -36 zamiast 220?

Dzieje się tak, ponieważ kompilator pokazuje uzupełnienie do 2 tej liczby; ujemny zapis liczby binarnej.

Dla dowolnej liczby całkowitej n, dopełnienie 2 do n będzie -(n+1).

 Dziesiętne uzupełnienie dwójkowe --------- --------- ---------------------------- ----------- 0 00000000 - (11111111 + 1) = -00000000 = -0 (dziesiętne) 1 00000001 - (11111110 + 1) = -11111111 = -256 (dziesiętne) 12 00001100 - (11110011 +1) = -11110100 = -244 (dziesiętnie) 220 11011100 - (00100011 + 1) = -00100100 = -36 (dziesiętnie) Uwaga: Przepełnienie jest ignorowane podczas obliczania uzupełnienia do 2.

Uzupełnienie bitowe liczby 35 to 220 (dziesiętnie). Uzupełnienie dwójki do 220 to -36. W związku z tym wyjście wynosi -36 zamiast 220.

5. shl

Te shlzmiany funkcji układu bitów w lewo o pewnej liczby specyficznych bitów, a bity zerowe są przesuwane do pozycji niskim.

 212 (binarnie: 11010100) 212 shl 1 daje w wyniku 424 (binarnie: 110101000) 212 shl 0 daje 212 (binarnie: 11010100) 212 shl 4 daje w wyniku 3392 (binarnie: 110101000000)

Przykład: przesunięcie bitowe w lewo

 fun main(args: Array) ( val number = 212 println(number shl 1) println(number shl 0) println(number shl 4) )

Po uruchomieniu programu wynik będzie następujący:

 424 212 3392

6. shr

Te shrzmiany Bit Funkcja pattery na prawo od numeru certin określonych bitów.

 212 (binarnie: 11010100) 212 shr 1 szacuje na 106 (binarnie: 01101010) 212 shr 0 szacuje na 212 (binarnie: 11010100) 212 shr 8 szacuje na 0 (binarnie: 00000000)

Jeśli liczba jest liczbą uzupełniającą do 2 ze znakiem, bit znaku jest przesuwany na najwyższe pozycje.

 fun main(args: Array) ( val number = 212 println(number shr 1) println(number shr 0) println(number shr 8) )

Po uruchomieniu programu wynik będzie następujący:

 106 212 0

7. ushr

Te ushrzmiany zerowania w skrajnym lewym położeniu.

Przykład: prawy Shift ze znakiem i bez znaku

 fun main(args: Array) ( val number1 = 5 val number2 = -5 // Signed right shift println(number1 shr 1) // Unsigned right shift println(number1 ushr 1) // Signed right shift println(number2 shr 1) // Unsigned right shift println(number2 ushr 1) )

Po uruchomieniu programu wynik będzie następujący:

 2 2 -3 2147483645

Zwróć uwagę, jak funkcja przesunięcia w prawo ze znakiem i bez znaku działa inaczej dla dopełnienia 2.

Uzupełnienie dwójki 2147483645jest 3.

Interesujące artykuły...