„Kotlin Bitwise“ ir „Bitshift“ operacijos (su pavyzdžiais)

„Kotlin“ teikia kelias funkcijas (infiksų pavidalu), kad būtų galima atlikti bitų ir bitų perjungimo operaciją. Šiame straipsnyje jūs išmoksite atlikti bitų lygio operaciją Kotline, naudodamiesi pavyzdžiais.

Bitų ir bitų poslinkio operatoriai naudojami tik dviejų tipų ( Intir Long) bitų lygio operacijoms atlikti.

Norėdami atlikti šias operacijas, „Kotlin“ teikia 7 funkcijas, naudodamas „infix“ žymėjimą.

1. arba

orFunkcija palygina atitinkančius bitai dviejų verčių. Jei kuris nors iš bitų yra 1, jis suteikia 1. Jei ne, tai suteikia 0. Pavyzdžiui,

 12 = 00001100 (dvejetainiu būdu) 25 = 00011001 (dvejetainiu būdu) Bitais ARBA 12 ir 25 operacijos 00001100 arba 00011001 ________ 00011101 = 29 (dešimtainiu skaičiumi)

Pavyzdys: „Bitwise“ arba „Operation“

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

Kai paleisite programą, išvestis bus:

 29

2. ir

andFunkcija palygina atitinkančius bitai dviejų verčių. Jei abu bitai yra 1, jis vertinamas iki 1. Jei kuris nors iš bitų yra 0, jis įvertinamas iki 0. Pavyzdžiui,

 12 = 00001100 (dvejetainiu būdu) 25 = 00011001 (dvejetainiu) 12 ir 25 bitų veikimas 00001100 ir 00011001 ________ 00001000 = 8 (dešimtainiu kableliu)

Pavyzdys: „Bitwise“ ir „Operation“

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

Kai paleisite programą, išvestis bus:

 8

3. xor

xorFunkcija palygina atitinkančius bitai dviejų verčių. Jei atitinkami bitai yra skirtingi, tai duoda 1. Jei atitinkami bitai yra vienodi, tai suteikia 0. Pavyzdžiui,

 12 = 00001100 (dvejetainiu būdu) 25 = 00011001 (dvejetainiu pavidalu) ARBA 12 ir 25 operacijos 00001100 xor 00011001 ________ 00010101 = 21 (dešimtainiu skaičiumi)

Pavyzdys: Operacija „Bitwise xor“

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

Kai paleisite programą, išvestis bus:

 21

4. inv ()

Funkcija inv () apvers bitų modelį. Tai daro nuo 0 iki 1 ir nuo 1 iki 0.

 35 = 00100011 (dvejetainiu skaičiumi) Papildoma operacija 35 00100011 ________ 11011100 = 220 (dešimtųjų tikslumu)

Pavyzdys: papildymas bitais

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

Kai paleisite programą, išvestis bus:

 -36

Kodėl gauname -36, o ne 220 išvestį?

Taip yra todėl, kad kompiliatorius rodo šio skaičiaus 2 papildymą; neigiamas dvejetainio skaičiaus žymėjimas.

Bet kuriam sveikam skaičiui n bus 2 n papildinys -(n+1).

 Dešimtainis dvejetainis dvejetainis 2 papildymas --------- --------- ---------------------------- ----------- 0 00000000 - (11111111 + 1) = -00000000 = -0 (dešimtainis skaičius) 1 00000001 - (11111110 + 1) = -11111111 = -256 (dešimtainis) 12 00001100 - (11110011 +1) = -11110100 = -244 (dešimtainis skaičius) 220 11011100 - (00100011 + 1) = -00100100 = -36 (dešimtainis skaičius) Pastaba: skaičiuojant 2 papildymą nepaisoma perpildymo.

35 papildinys bitais yra 220 (dešimtainis). 2 papildymas 220 yra -36. Taigi išvestis yra -36, o ne 220.

5. shl

Į shlfunkciniai pokyčiai šiek tiek modelį į kairę iki tam tikro skaičiaus nurodytų bitai, o nulis bitai perėjo į mažos eilės pozicijų.

 212 (dvejetainiu: 11010100) 212 shl 1 įvertinamas iki 424 (dvejetainiu: 110101000) 212 shl 0 įvertinamas iki 212 (dvejetainiu: 11010100) 212 shl 4 įvertinamas iki 3392 (dvejetainiu: 110101000000)

Pavyzdys: kairėn kairėn poslinkis

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

Kai paleisite programą, išvestis bus:

 424 212 3392

6. švent

Į shrfunkciniai pokyčiai šiek tiek pattery į dešinę iki certin skaičius nurodytas bitai.

 212 (dvejetainiu: 11010100) 212 shr 1 vertinamas iki 106 (dvejetainiu: 01101010) 212 shr 0 vertinamas iki 212 (dvejetainiu: 11010100) 212 shr 8 vertinamas 0 (dvejetainiu: 00000000)

Jei skaičius yra 2 papildomas pasirašytasis skaičius, ženklo bitai perkeliami į aukštos eilės pozicijas.

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

Kai paleisite programą, bus:

 106 212 0

7. ushr

Į ushrfunkciniai pokyčiai nulio į kairįjį padėtį.

Pavyzdys: pasirašytas ir nepasirašytas dešinysis „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) )

Kai paleisite programą, išvestis bus:

 2 2 -3 2147483645

Atkreipkite dėmesį, kaip pasirašyto ir nepasirašyto dešiniojo poslinkio funkcija veikia skirtingai 2 papildymui.

2 papildymas 2147483645yra 3.

Įdomios straipsniai...