Kotlin Bitwise- und Bitshift-Operationen (mit Beispielen)

Kotlin bietet verschiedene Funktionen (in Infixform), um bitweise und bitverschobene Operationen durchzuführen. In diesem Artikel lernen Sie anhand von Beispielen, wie Sie in Kotlin eine Operation auf Bitebene durchführen.

Bitweise und Bitverschiebungsoperatoren werden nur für zwei integrale Typen ( Intund Long) verwendet, um Operationen auf Bitebene auszuführen.

Um diese Operationen auszuführen, bietet Kotlin 7 Funktionen in Infix-Notation.

1. oder

Die orFunktion vergleicht entsprechende Bits mit zwei Werten. Wenn eines der Bits 1 ist, ergibt es 1. Wenn nicht, ergibt es 0. Zum Beispiel:

 12 = 00001100 (binär) 25 = 00011001 (binär) Bitweise ODER Operation von 12 und 25 00001100 oder 00011001 ________ 00011101 = 29 (dezimal)

Beispiel: Bitweise oder Operation

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

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 29

2 und

Die andFunktion vergleicht entsprechende Bits mit zwei Werten. Wenn beide Bits 1 sind, wird es mit 1 ausgewertet. Wenn eines der Bits 0 ist, wird es mit 0 ausgewertet.

 12 = 00001100 (binär) 25 = 00011001 (binär) Bitbetrieb von 12 und 25 00001100 und 00011001 ________ 00001000 = 8 (dezimal)

Beispiel: Bitweise und Bedienung

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

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 8

3. xor

Die xorFunktion vergleicht entsprechende Bits mit zwei Werten. Wenn die entsprechenden Bits unterschiedlich sind, ergibt sich 1. Wenn die entsprechenden Bits gleich sind, ergibt sich 0. Zum Beispiel:

 12 = 00001100 (binär) 25 = 00011001 (binär) Bitweise ODER Operation von 12 und 25 00001100 xoder 00011001 ________ 00010101 = 21 (dezimal)

Beispiel: Bitweise xoder Operation

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

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 21

4. inv ()

Die Funktion inv () invertiert das Bitmuster. Es macht jede 0 zu 1 und jede 1 zu 0.

 35 = 00100011 (binär) Bitweises Komplement Operation von 35 00100011 ________ 11011100 = 220 (dezimal)

Beispiel: Bitweises Komplement

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

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 -36

Warum erhalten wir Ausgabe -36 statt 220?

Dies liegt daran, dass der Compiler das Zweierkomplement dieser Zahl anzeigt. negative Notation der Binärzahl.

Für jede ganze Zahl n ist das 2er-Komplement von n -(n+1).

 Dezimal Binary 2's Komplement --------- --------- ---------------------------- ----------- 0 00000000 - (11111111 + 1) = -00000000 = -0 (dezimal) 1 00000001 - (11111110 + 1) = -11111111 = -256 (dezimal) 12 00001100 - (11110011 +1) = -11110100 = -244 (dezimal) 220 11011100 - (00100011 + 1) = -00100100 = -36 (dezimal) Hinweis: Der Überlauf wird bei der Berechnung des 2er-Komplements ignoriert.

Das bitweise Komplement von 35 ist 220 (dezimal). Das 2er-Komplement von 220 ist -36. Daher ist die Ausgabe -36 anstelle von 220.

5. shl

Die shlFunktion verschiebt das Bitmuster um eine bestimmte Anzahl spezifizierter Bits nach links, und Nullbits werden in die Positionen niedriger Ordnung verschoben.

 212 (In Binär: 11010100) 212 shl 1 ergibt 424 (In Binär: 110101000) 212 shl 0 ergibt 212 (In Binär: 11010100) 212 shl 4 ergibt 3392 (In Binär: 110101000000)

Beispiel: Bitweise Linksverschiebung

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

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 424 212 3392

6. shr

Die shrFunktion verschiebt die Bitpatterie um die bestimmte Anzahl der angegebenen Bits nach rechts.

 212 (In Binär: 11010100) 212 shr 1 ergibt 106 (In Binär: 01101010) 212 shr 0 ergibt 212 (In Binär: 11010100) 212 shr 8 ergibt 0 (In Binär: 00000000)

Wenn die Zahl eine 2er-Komplement-Vorzeichenzahl ist, wird das Vorzeichenbit in die Positionen höherer Ordnung verschoben.

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

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 106 212 0

7. ushr

Die ushrFunktion verschiebt Null in die Position ganz links.

Beispiel: signierte und nicht signierte Rechtsverschiebung

 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) )

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 2 2 -3 2147483645

Beachten Sie, wie die vorzeichenbehaftete und vorzeichenlose Rechtsverschiebungsfunktion für das 2er-Komplement unterschiedlich funktioniert.

Das 2er-Komplement von 2147483645ist 3.

Interessante Beiträge...