Kotlin Bitwise ja Bitshift toimingud (koos näidetega)

Lang L: none (table-of-contents)

Kotlin pakub bit- ja bitshift-toimingute tegemiseks mitmeid funktsioone (infiksi kujul). Selles artiklis õpite näidete abil Kotlinis bititaseme toiminguid tegema.

Bittitasemel toimingute tegemiseks kasutatakse biti- ja bitinihkeoperaatoreid ainult kahe integraalse tüübi ( Intja Long) puhul.

Nende toimingute tegemiseks pakub Kotlin seitse funktsiooni, kasutades infiksi noode.

1. või

orFunktsioon võrdleb vastava bitti kahe väärtuse. Kui kumbki bittidest on 1, annab see 1. Kui ei, siis annab 0. Näiteks

 12 = 00001100 (binaarses vormis) 25 = 00011001 (binaarses vormingus) Piki kaupa VÕI operatsioon 12 või 25 00001100 või 00011001 ________ 00011101 = 29 (kümnendkohaga)

Näide: bititi või operatsioon

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

Programmi käivitamisel on väljund järgmine:

 29

2. ja

andFunktsioon võrdleb vastava bitti kahe väärtuse. Kui mõlemad bitid on 1, hinnatakse see väärtuseks 1. Kui üks neist on 0, hinnatakse see väärtuseks 0. Näiteks

 12 = 00001100 (binaarses vormingus) 25 = 00011001 (binaarses vormingus) bittide operatsioon 12 ja 25 korral 00001100 ja 00011001 ________ 00001000 = 8 (kümnendkohaga)

Näide: bititi ja töö

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

Programmi käivitamisel on väljund järgmine:

 8

3. xor

xorFunktsioon võrdleb vastava bitti kahe väärtuse. Kui vastavad bitid on erinevad, annab see 1. Kui vastavad bitid on samad, annab see 0. Näiteks

 12 = 00001100 (binaarses vormingus) 25 = 00011001 (binaarses vormingus) Piki kaupa VÕI operatsioon 12 või 25 00001100 x või 00011001 ________ 00010101 = 21 (kümnendkohaga)

Näide: Operatsioon bitipidi xor

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

Programmi käivitamisel on väljund järgmine:

 21

4. inv ()

Funktsioon inv () pöörab bitimudeli ümber. See teeb iga 0 kuni 1 ja iga 1 kuni 0.

 35 = 00100011 (binaarses vormis) Komplekti 35 00100011 biti kaupa toiming ________ 11011100 = 220 (kümnendkohaga)

Näide: täiendus bititi

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

Programmi käivitamisel on väljund järgmine:

 -36

Miks saame väljundi -36 asemel 220?

Sellepärast, et kompilaator näitab selle numbri 2 täiendit; binaararvu negatiivne tähistamine.

Mis tahes täisarvu n jaoks on 2 n-i täiend -(n+1).

 Kümnendkoha binaarne 2 täiend --------- --------- ---------------------------- ----------- 0 00000000 - (11111111 + 1) = -00000000 = -0 (kümnendkoht) 1 00000001 - (11111110 + 1) = -11111111 = -256 (kümnendkoht) 12 00001100 - (11110011 +1) = -11110100 = -244 (kümnendkoht) 220 11011100 - (00100011 + 1) = -00100100 = -36 (kümnendkoht) Märkus: 2. täiendit arvutades eiratakse ülevoolu.

35 bittide täiend on 220 (kümnendkohaga). 2 täiend 220 on -36. Seega on väljund 220 asemel 220.

5. shl

shlFunktsiooni nihked bitimudelist vasakule teatud arvu teatud bitti ja null bitti nihutatakse väikese positsioonidel.

 212 (binaarne: 11010100) 212 shl 1 väärtus on 424 (binaarne: 110101000) 212 shl 0 väärtus on 212 (binaarne: 11010100) 212 shl 4 väärtus on 3392 (binaarne: 110101000000)

Näide: vasakpoolne nihe biti kaupa

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

Programmi käivitamisel on väljund järgmine:

 424 212 3392

6. shr

shrFunktsiooni nihked hammustas pattery paremal poolt certin arvu teatud bitti.

 212 (binaarne: 11010100) 212 shr 1 väärtus on 106 (binaarne: 01101010) 212 shr 0 väärtus on 212 (binaarne: 11010100) 212 shr 8 väärtus on 0 (binaarne: 00000000)

Kui number on 2 komplemendiga allkirjastatud number, nihutatakse märgibitt kõrgema järgu positsioonidesse.

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

Programmi käivitamisel on järgmine valik:

 106 212 0

7. ushr

ushrFunktsiooni nihked null arvesse Vasakpoolses servas.

Näide: allkirjastatud ja allkirjastamata parem nihe

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

Programmi käivitamisel on väljund järgmine:

 2 2 -3 2147483645

Pange tähele, kuidas allkirjastatud ja allkirjastamata parempoolse nihke funktsioon töötab 2 komplemendi puhul erinevalt.

2 täiend 2147483645on 3.

Huvitavad Artiklid...