Kotlin Bitwise och Bitshift-operationer (med exempel)

Kotlin erbjuder flera funktioner (i infixform) för att utföra bitvis och bitförskjutning. I den här artikeln lär du dig att utföra bitnivåoperation i Kotlin med hjälp av exempel.

Bitvisa och bitförskjutningsoperatorer används på endast två integraltyper ( Intoch Long) för att utföra bitnivåoperationer.

För att utveckla dessa operationer tillhandahåller Kotlin 7 funktioner med infixnotation.

1. eller

Den orfunktionen jämför motsvarande bitar av två värden. Om någon av bitarna är 1, ger den 1. Om inte, ger den 0. Till exempel,

 12 = 00001100 (i binär) 25 = 00011001 (i binär) bitvis ELLER användning av 12 och 25 00001100 eller 00011001 ________ 00011101 = 29 (i decimal)

Exempel: Bitvis eller drift

 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 kör programmet blir resultatet:

 29

2. och

Den andfunktionen jämför motsvarande bitar av två värden. Om båda bitarna är 1 utvärderas den till 1. Om någon av bitarna är 0 utvärderas den till 0. Till exempel

 12 = 00001100 (i binär) 25 = 00011001 (i binär) bitoperation på 12 och 25 00001100 och 00011001 ________ 00001000 = 8 (i decimal)

Exempel: Bitvis och drift

 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 kör programmet blir resultatet:

 8

3. xor

Den xorfunktionen jämför motsvarande bitar av två värden. Om motsvarande bitar är olika ger det 1. Om motsvarande bitar är desamma ger det 0. Till exempel,

 12 = 00001100 (i binär) 25 = 00011001 (i binär) bitvis ELLER användning av 12 och 25 00001100 xor 00011001 ________ 00010101 = 21 (i decimal)

Exempel: Bitvis xor drift

 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 kör programmet blir resultatet:

 21

4. inv ()

Funktionen inv () inverterar bitmönstret. Det gör varje 0 till 1 och var 1 till 0.

 35 = 00100011 (i binär) Bitvis komplement Användning av 35 00100011 ________ 11011100 = 220 (i decimal)

Exempel: Bitvis komplement

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

När du kör programmet blir resultatet:

 -36

Varför får vi output -36 istället för 220?

Det beror på att kompilatorn visar 2: s komplement av det numret; negativ notering av det binära numret.

För alla heltal n kommer 2: s komplement av n att vara -(n+1).

 Decimalt binärt 2-komplement --------- --------- ---------------------------- ----------- 0 00000000 - (11111111 + 1) = -00000000 = -0 (decimal) 1 00000001 - (11111110 + 1) = -11111111 = -256 (decimal) 12 00001100 - (11110011 +1) = -11110100 = -244 (decimal) 220 11011100 - (00100011 + 1) = -00100100 = -36 (decimal) Obs! Överflöde ignoreras vid beräkning av 2: s komplement.

Det bitvisa komplementet på 35 är 220 (i decimal). 2: s komplement på 220 är -36. Följaktligen är utdata -36 istället för 220.

5. shl

De shlfunktions skift bitmönster till vänster genom visst antal specificerade bitar och noll-bitar skiftas in i de lägre ordning positioner.

 212 (I binär: 11010100) 212 shl 1 utvärderas till 424 (I binär: 110101000) 212 shl 0 utvärderas till 212 (I binär: 11010100) 212 shl 4 utvärderas till 3392 (I binär: 110101000000)

Exempel: Bitvis vänster skift

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

När du kör programmet blir resultatet:

 424 212 3392

6. shr

De shrfunktions skiftar lite pattery till höger genom certin antal specificerade bitar.

 212 (I binär: 11010100) 212 shr 1 utvärderas till 106 (I binär: 01101010) 212 shr 0 utvärderas till 212 (I binär: 11010100) 212 shr 8 utvärderas till 0 (I binär: 00000000)

Om numret är ett 2: s komplement undertecknat nummer flyttas teckenbiten till högordenspositionerna.

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

När du kör programmet blir utgången:

 106 212 0

7. ushr

De ushrfunktions skift noll i läget längst till vänster.

Exempel: signerad och osignerad 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 kör programmet blir resultatet:

 2 2 -3 2147483645

Observera hur signerad och osignerad högerskiftfunktion fungerar annorlunda för 2: s komplement.

2: s komplement av 2147483645är 3.

Intressanta artiklar...