Kotlin Bitwise og Bitshift-operasjoner (med eksempler)

Kotlin tilbyr flere funksjoner (i infiks form) for å utføre bitvis og bitshift-operasjon. I denne artikkelen vil du lære å utføre bitnivåoperasjon i Kotlin ved hjelp av eksempler.

Bitvise og bitskiftoperatører brukes på bare to integrerte typer ( Intog Long) for å utføre bitnivåoperasjoner.

For å utvikle disse operasjonene, tilbyr Kotlin 7 funksjoner ved hjelp av infiksnotasjon.

1. eller

Den orfunksjon sammentilsvarende biter av to verdier. Hvis en av bitene er 1, gir den 1. Hvis ikke, gir den 0. For eksempel

 12 = 00001100 (i binær) 25 = 00011001 (i binær) bitvis ELLER bruk av 12 og 25 00001100 eller 00011001 ________ 00011101 = 29 (i desimal)

Eksempel: Bitvis eller betjening

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

Når du kjører programmet, vil utdataene være:

 29

2. og

Den andfunksjon sammentilsvarende biter av to verdier. Hvis begge bitene er 1, blir den evaluert til 1. Hvis en av bitene er 0, blir den evaluert til 0. For eksempel

 12 = 00001100 (i binær) 25 = 00011001 (i binær) bitoperasjon på 12 og 25 00001100 og 00011001 ________ 00001000 = 8 (i desimal)

Eksempel: Bitvis og betjening

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

Når du kjører programmet, vil utdataene være:

 8

3. xor

Den xorfunksjon sammentilsvarende biter av to verdier. Hvis tilsvarende bits er forskjellige, gir det 1. Hvis tilsvarende bits er like, gir det 0. For eksempel,

 12 = 00001100 (i binær) 25 = 00011001 (i binær) bitvis ELLER bruk av 12 og 25 00001100 xor 00011001 ________ 00010101 = 21 (i desimal)

Eksempel: Bitvis eller bruk

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

Når du kjører programmet, vil utdataene være:

 21

4. inv ()

Funksjonen inv () inverterer bitmønsteret. Det gjør hver 0 til 1, og hver 1 til 0.

 35 = 00100011 (i binær) Bitvis komplement Betjening av 35 00100011 ________ 11011100 = 220 (i desimal)

Eksempel: Bitvis komplement

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

Når du kjører programmet, vil utdataene være:

 -36

Hvorfor får vi output -36 i stedet for 220?

Det er fordi kompilatoren viser 2s komplement av det tallet; negativ notasjon av det binære tallet.

For ethvert heltall n vil 2s komplement av n være -(n+1).

 Desimal binær 2 komplement --------- --------- ---------------------------- ----------- 0 00000000 - (11111111 + 1) = -00000000 = -0 (desimal) 1 00000001 - (11111110 + 1) = -11111111 = -256 (desimal) 12 00001100 - (11110011 +1) = -11110100 = -244 (desimal) 220 11011100 - (00100011 + 1) = -00100100 = -36 (desimal) Merk: Overflyt ignoreres mens du beregner 2s komplement.

Det bitvise komplementet på 35 er 220 (i desimal). 2-tallet komplement på 220 er -36. Derfor er produksjonen -36 i stedet for 220.

5. shl

De shlfunksjons skift bitmønster til venstre ved visst antall spesifiserte bits, og null bits blir overført til det lav-ordens posisjoner.

 212 (I binær: 11010100) 212 shl 1 evalueres til 424 (I binær: 110101000) 212 shl 0 evalueres til 212 (I binær: 11010100) 212 shl 4 evalueres til 3392 (I binær: 110101000000)

Eksempel: Bitvis venstre skift

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

Når du kjører programmet, vil utdataene være:

 424 212 3392

6. skr

De shrfunksjons skift bet pattery til høyre ved certin antall spesifiserte bits.

 212 (I binær: 11010100) 212 shr 1 evalueres til 106 (I binær: 01101010) 212 shr 0 evalueres til 212 (I binær: 11010100) 212 shr 8 evalueres til 0 (I binær: 00000000)

Hvis tallet er et 2s komplement-signert nummer, flyttes sign-biten til høyordensposisjonene.

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

Når du kjører programmet, vil utgangen være:

 106 212 0

7. ushr

De ushrfunksjons skift null inn i den ytterste venstre stilling.

Eksempel: signert og usignert 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) )

Når du kjører programmet, vil utdataene være:

 2 2 -3 2147483645

Legg merke til hvordan signert og usignert høyre skiftfunksjon fungerer annerledes for 2s komplement.

2-tallet komplement av 2147483645er 3.

Interessante artikler...