Kotlin Bitwise in Bitshift Operations (z primeri)

Kotlin ponuja več funkcij (v obliki infiksa) za izvajanje bitnih in bitnih premikov. V tem članku se boste s pomočjo primerov naučili izvajati delovanje nivoja bitov v Kotlinu.

Operatorji bitnega in bitnega premika se uporabljajo samo na dveh integralnih vrstah ( Intin Long) za izvajanje operacij na bitni ravni.

Za izvedbo teh operacij Kotlin ponuja 7 funkcij z uporabo infiksnega zapisa.

1. oz

orFunkcija primerja ustrezne bitov dveh vrednosti. Če je kateri koli od bitov 1, daje 1. Če ne, dobi 0. Na primer,

 12 = 00001100 (v binarnem) 25 = 00011001 (v binarnem) Bitno ALI Delovanje 12 in 25 00001100 ali 00011001 ________ 00011101 = 29 (v decimalnem)

Primer: Bit-bit ali delovanje

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

Ko zaženete program, bo rezultat:

 29.

2. in

andFunkcija primerja ustrezne bitov dveh vrednosti. Če sta oba bita 1, se izračuna na 1. Če je kateri koli od bitov 0, se izračuna na 0. Na primer,

 12 = 00001100 (v binarnem) 25 = 00011001 (v binarnem) Bit delovanje 12 in 25 00001100 in 00011001 ________ 00001000 = 8 (v decimalnem)

Primer: Bit-bit in delovanje

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

Ko zaženete program, bo rezultat:

 8.

3. xor

xorFunkcija primerja ustrezne bitov dveh vrednosti. Če so ustrezni biti različni, dobi 1. Če so ustrezni biti enaki, da 0. Na primer,

 12 = 00001100 (v binarnem) 25 = 00011001 (v binarnem) Bitno ALI Delovanje 12 in 25 00001100 xor 00011001 ________ 00010101 = 21 (v decimalnem)

Primer: Delovanje bitov xor

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

Ko zaženete program, bo rezultat:

 21.

4. inv ()

Funkcija inv () obrne bitni vzorec. Naredi vsakih 0 do 1 in vsakih 1 do 0.

 35 = 00100011 (v binarni različici) Bitno dopolnilo Operacija 35 00100011 ________ 11011100 = 220 (v decimalni številki)

Primer: Bitno dopolnilo

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

Ko zaženete program, bo rezultat:

 -36

Zakaj dobimo izhod -36 namesto 220?

To je zato, ker prevajalnik prikazuje dopolnilo te številke 2; negativni zapis binarnega števila.

Za katero koli celo število n bo 2 dopolnilo n -(n+1).

 Dopolnilo decimalnega binarnega 2 --------- --------- ---------------------------- ----------- 0 00000000 - (11111111 + 1) = -00000000 = -0 (decimalno) 1 00000001 - (11111110 + 1) = -11111111 = -256 (decimalno) 12 00001100 - (11110011 +1) = -11110100 = -244 (decimalno) 220 11011100 - (00100011 + 1) = -00100100 = -36 (decimalno) Opomba: Prelivanje se med računanjem komplementa 2 prezre.

Bitno dopolnilo 35 je 220 (v decimalnih številkah). Komplementa 2 z 220 je -36. Izhod je torej -36 namesto 220.

5. shl

Za shlfunkcijo premiki bitni vzorec, na levi strani z določeno število določenih bitov, in nič bitov se premakne v položajih nizkega reda.

 212 (v binarnem: 11010100) 212 shl 1 oceni na 424 (v binarnem: 110101000) 212 shl 0 oceni na 212 (v binarnem: 11010100) 212 shl 4 oceni na 3392 (v binarnem: 110101000000)

Primer: Bit-premik levo

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

Ko zaženete program, bo rezultat:

 424 212 3392

6. skr

V shrfunkcijski premiki bit pattery pravici iz certin število določenih bitov.

 212 (v binarnem: 11010100) 212 shr 1 oceni na 106 (v binarnem: 01101010) 212 shr 0 oceni na 212 (v binarnem: 11010100) 212 shr 8 oceni na 0 (v binarnem: 00000000)

Če je številka dopolnjena podpisana številka 2, se znakovni bit premakne v položaje visokega reda.

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

Ko zaženete program, bo izhod:

 106 212 0

7. ushr

V ushrfunkcijski premiki nič v skrajnem levem položaju.

Primer: podpisani in nepodpisani desni premik

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

Ko zaženete program, bo rezultat:

 2 2 -3 2147483645

Upoštevajte, kako podpisana in nepodpisana funkcija desnega premika deluje drugače za dopolnilo 2.

Dopolnilo 2 2147483645je 3.

Zanimive Članki...