Operații Kotlin Bitwise și Bitshift (cu exemple)

Kotlin oferă mai multe funcții (sub formă de infixare) pentru a efectua operații bit și shift. În acest articol, veți învăța să efectuați operații de nivel de biți în Kotlin cu ajutorul exemplelor.

Operatorii bit și bit shift sunt utilizați numai pe două tipuri integrale ( Intși Long) pentru a efectua operații la nivel de biți.

Pentru a realiza aceste operații, Kotlin oferă 7 funcții folosind notația infix.

1. sau

orFuncția compară biții corespunzători ai două valori. Dacă oricare dintre biți este 1, dă 1. Dacă nu, dă 0. De exemplu,

 12 = 00001100 (În binar) 25 = 00011001 (În binar) În funcție de bit SAU Funcționarea 12 și 25 00001100 sau 00011001 ________ 00011101 = 29 (În zecimal)

Exemplu: Bitwise sau Operation

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

Când rulați programul, ieșirea va fi:

 29

2. și

andFuncția compară biții corespunzători ai două valori. Dacă ambii biți sunt 1, acesta este evaluat la 1. Dacă oricare dintre biți este 0, este evaluat la 0. De exemplu,

 12 = 00001100 (în binar) 25 = 00011001 (în binar) Funcționare pe biți de 12 și 25 00001100 și 00011001 ________ 00001000 = 8 (în zecimal)

Exemplu: Bitwise și Operation

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

Când rulați programul, ieșirea va fi:

 8

3. xor

xorFuncția compară biții corespunzători ai două valori. Dacă biții corespunzători sunt diferiți, dă 1. Dacă biții corespunzători sunt aceiași, dă 0. De exemplu,

 12 = 00001100 (În binar) 25 = 00011001 (În binar) În funcție de bit SAU Funcționare de 12 și 25 00001100 xor 00011001 ________ 00010101 = 21 (În zecimal)

Exemplu: Operațiunea 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) )

Când rulați programul, ieșirea va fi:

 21

4. inv ()

Funcția inv () inversează modelul de biți. Face fiecare 0 la 1 și fiecare 1 la 0.

 35 = 00100011 (în binar) Completare pe biți Operațiunea 35 00100011 ________ 11011100 = 220 (în zecimal)

Exemplu: complement bitwise

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

Când rulați programul, ieșirea va fi:

 -36

De ce obținem ieșirea -36 în loc de 220?

Acest lucru se datorează faptului că compilatorul arată complementul 2 al acelui număr; notație negativă a numărului binar.

Pentru orice număr întreg n, complementul lui 2 al lui n va fi -(n+1).

 Complementul binarului 2 zecimal --------- --------- ---------------------------- ----------- 0 00000000 - (11111111 + 1) = -00000000 = -0 (zecimal) 1 00000001 - (11111110 + 1) = -11111111 = -256 (zecimal) 12 00001100 - (11110011 +1) = -11110100 = -244 (zecimal) 220 11011100 - (00100011 + 1) = -00100100 = -36 (zecimal) Notă: Depășirea este ignorată în timp ce se calculează complementul 2.

Complementul în biți de 35 este 220 (în zecimal). Complementul celor 2 de 220 este -36. Prin urmare, ieșirea este -36 în loc de 220.

5. shl

Cele shlDeplasările funcționale bit model la stânga de anumit număr de biți specificat, și zero , biții sunt deplasate în pozițiile low-ordine.

 212 (În binar: 11010100) 212 shl 1 evaluează la 424 (În binar: 110101000) 212 shl 0 evaluează la 212 (În binar: 11010100) 212 shl 4 evaluează la 3392 (În binar: 110101000000)

Exemplu: Shift bitwise left shift

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

Când rulați programul, ieșirea va fi:

 424 212 3392

6. shr

Cele shrschimburi de funcții biți pattery la dreapta prin numărul de biți certin specificate.

 212 (În binar: 11010100) 212 shr 1 evaluează la 106 (În binar: 01101010) 212 shr 0 evaluează la 212 (În binar: 11010100) 212 shr 8 evaluează la 0 (În binar: 00000000)

Dacă numărul este numărul semnat complementar al unui 2, bitul de semn este mutat în pozițiile de ordin înalt.

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

Când rulați programul, ieșirea va fi:

 106 212 0

7. ushr

De ushrDeplasările funcția zero , în capătul din stânga.

Exemplu: Shift dreapta semnat și nesemnat

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

Când rulați programul, ieșirea va fi:

 2 2 -3 2147483645

Observați, modul în care funcția de schimbare dreaptă semnată și nesemnată funcționează diferit pentru complementul 2.

Complementul celor 2 2147483645este 3.

Articole interesante...