Kotlin Bitwise en Bitshift Operations (met voorbeelden)

Kotlin biedt verschillende functies (in tussenvoegselvorm) om bitsgewijze en bitverschuivingsbewerkingen uit te voeren. In dit artikel leert u aan de hand van voorbeelden bitniveau-bewerkingen in Kotlin uit te voeren.

Bitsgewijze en bitverschuivingsoperatoren worden slechts op twee integrale typen ( Inten Long) gebruikt om bewerkingen op bitniveau uit te voeren.

Om deze bewerkingen uit te voeren, biedt Kotlin 7 functies met tussenvoegselnotatie.

1. of

De orfunctie vergelijkt corresponderende bits van twee waarden. Als een van de bits 1 is, levert dit 1 op. Zo niet, dan geeft dit 0. Bijvoorbeeld,

 12 = 00001100 (in binair) 25 = 00011001 (in binair) Bitsgewijs OF bewerking van 12 en 25 00001100 of 00011001 ________ 00011101 = 29 (in decimaal)

Voorbeeld: Bitwise of Operation

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

Wanneer u het programma uitvoert, is de uitvoer:

 29

2. en

De andfunctie vergelijkt overeenkomstige bits van twee waarden. Als beide bits 1 zijn, wordt deze geëvalueerd als 1. Als een van de bits 0 is, wordt deze geëvalueerd als 0. Bijvoorbeeld:

 12 = 00001100 (in binair) 25 = 00011001 (in binair) Bitwerking van 12 en 25 00001100 en 00011001 ________ 00001000 = 8 (in decimaal)

Voorbeeld: Bitwise en Operation

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

Wanneer u het programma uitvoert, is de uitvoer:

 8

3. xor

De xorfunctie vergelijkt overeenkomstige bits van twee waarden. Als corresponderende bits verschillend zijn, geeft dit 1. Als corresponderende bits hetzelfde zijn, geeft dit 0. Bijvoorbeeld,

 12 = 00001100 (in binair) 25 = 00011001 (in binair) Bitsgewijs OF bewerking van 12 en 25 00001100 x of 00011001 ________ 00010101 = 21 (in decimaal)

Voorbeeld: Bitwise xor-bewerking

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

Wanneer u het programma uitvoert, is de uitvoer:

 21

4. inv ()

De inv () functie keert het bitpatroon om. Het maakt elke 0 op 1 en elke 1 op 0.

 35 = 00100011 (In binair) Bitsgewijs complement Werking van 35 00100011 ________ 11011100 = 220 (In decimaal)

Voorbeeld: bitsgewijze aanvulling

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

Wanneer u het programma uitvoert, is de uitvoer:

 -36

Waarom krijgen we output -36 in plaats van 220?

Het is omdat de compiler het 2-complement van dat getal laat zien; negatieve notatie van het binaire getal.

Voor elk geheel getal n, 2's complement van n zal zijn -(n+1).

 Decimaal complement van binair 2 --------- --------- ---------------------------- ----------- 0 00000000 - (11111111 + 1) = -00000000 = -0 (decimaal) 1 00000001 - (11111110 + 1) = -11111111 = -256 (decimaal) 12 00001100 - (11110011 +1) = -11110100 = -244 (decimaal) 220 11011100 - (00100011 + 1) = -00100100 = -36 (decimaal) Opmerking: Overflow wordt genegeerd tijdens het berekenen van 2's complement.

Het bitsgewijze complement van 35 is 220 (in decimaal). Het 2-complement van 220 is -36. De output is dus -36 in plaats van 220.

5. shl

De shlfunctie verschuift het bitpatroon naar links met een bepaald aantal gespecificeerde bits, en nul bits worden verschoven naar de lage orde posities.

 212 (in binair: 11010100) 212 shl 1 resulteert in 424 (in binair: 110101000) 212 shl 0 levert op 212 (in binair: 11010100) 212 shl 4 resulteert in 3392 (in binair: 110101000000)

Voorbeeld: bitsgewijze verschuiving naar links

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

Wanneer u het programma uitvoert, is de uitvoer:

 424212 3392

6. shr

De shrfunctie verschuift het bitpatroon naar rechts met een bepaald aantal gespecificeerde bits.

 212 (in binair: 11010100) 212 shr 1 resulteert in 106 (in binair: 01101010) 212 shr 0 resulteert in 212 (in binair: 11010100) 212 shr 8 resulteert in 0 (in binair: 00000000)

Als het nummer een 2-complementnummer is, wordt het tekenbit naar de hoge-ordeposities verschoven.

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

Wanneer u het programma uitvoert, is de output:

 106212 0

7. ushr

De ushrfunctie verschuift nul naar de meest linkse positie.

Voorbeeld: ondertekende en ongetekende Right Shift

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

Wanneer u het programma uitvoert, is de uitvoer:

 2 2-3 2147483645

Merk op hoe de ondertekende en niet-ondertekende rechterverschuivingsfunctie anders werkt voor het complement van 2.

Het complement van de 2 2147483645is 3.

Interessante artikelen...