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
or
Funcț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
and
Funcț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
xor
Funcț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 shl
Deplasă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 shr
schimburi 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 ushr
Deplasă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 2147483645
este 3
.