Kotlin Bitwise e operazioni Bitshift (con esempi)

Kotlin fornisce diverse funzioni (in formato infisso) per eseguire operazioni bit per bit e bitshift. In questo articolo imparerai a eseguire operazioni a livello di bit in Kotlin con l'aiuto di esempi.

Gli operatori bit per bit e di spostamento bit vengono utilizzati solo su due tipi integrali ( Inte Long) per eseguire operazioni a livello di bit.

Per eseguire queste operazioni, Kotlin fornisce 7 funzioni utilizzando la notazione infissa.

1. o

La orfunzione confronta i bit corrispondenti di due valori. Se uno dei bit è 1, restituisce 1. In caso contrario, restituisce 0. Ad esempio,

 12 = 00001100 (in binario) 25 = 00011001 (in binario) Operazione OR bit per bit di 12 e 25 00001100 o 00011001 ________ 00011101 = 29 (in decimale)

Esempio: bit per bit o operazione

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

Quando esegui il programma, l'output sarà:

 29

2. e

La andfunzione confronta i bit corrispondenti di due valori. Se entrambi i bit sono 1, viene valutato a 1. Se uno dei bit è 0, viene valutato a 0. Ad esempio,

 12 = 00001100 (in binario) 25 = 00011001 (in binario) Bit Operazione di 12 e 25 00001100 e 00011001 ________ 00001000 = 8 (in decimale)

Esempio: bit per bit e operazione

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

Quando esegui il programma, l'output sarà:

 8

3. xor

La xorfunzione confronta i bit corrispondenti di due valori. Se i bit corrispondenti sono diversi, restituisce 1. Se i bit corrispondenti sono uguali, restituisce 0. Ad esempio,

 12 = 00001100 (in binario) 25 = 00011001 (in binario) Operazione OR bit per bit di 12 e 25 00001100 xor 00011001 ________ 00010101 = 21 (in decimale)

Esempio: operazione xor bit per bit

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

Quando esegui il programma, l'output sarà:

 21

4. inv ()

La funzione inv () inverte la sequenza di bit. Fa ogni 0 a 1 e ogni 1 a 0.

 35 = 00100011 (in binario) Operazione a complemento bit per bit 35 00100011 ________ 11011100 = 220 (in decimale)

Esempio: complemento bit per bit

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

Quando esegui il programma, l'output sarà:

 -36

Perché stiamo ottenendo un output -36 invece di 220?

È perché il compilatore mostra il complemento a 2 di quel numero; notazione negativa del numero binario.

Per ogni numero intero n, sarà il complemento a 2 di n -(n+1).

 Decimale Binario 2 complemento --------- --------- ---------------------------- ----------- 0 00000000 - (11111111 + 1) = -00000000 = -0 (decimale) 1 00000001 - (11111110 + 1) = -11111111 = -256 (decimale) 12 00001100 - (11110011 +1) = -11110100 = -244 (decimale) 220 11011100 - (00100011 + 1) = -00100100 = -36 (decimale) Nota: l'overflow viene ignorato durante il calcolo del complemento a 2.

Il complemento bit a bit di 35 è 220 (in decimale). Il complemento di 2 di 220 è -36. Quindi, l'output è -36 invece di 220.

5. shl

La shlfunzione sposta la sequenza di bit a sinistra di un certo numero di bit specificati e i bit zero vengono spostati nelle posizioni di ordine inferiore.

 212 (In binario: 11010100) 212 shl 1 restituisce 424 (In binario: 110101000) 212 shl 0 restituisce 212 (In binario: 11010100) 212 shl 4 restituisce 3392 (In binario: 110101000000)

Esempio: spostamento a sinistra bit per bit

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

Quando esegui il programma, l'output sarà:

 424212 3392

6. shr

La shrfunzione sposta lo schema di bit a destra del numero di bit specificato.

 212 (In binario: 11010100) 212 shr 1 restituisce 106 (In binario: 01101010) 212 shr 0 restituisce 212 (In binario: 11010100) 212 shr 8 restituisce 0 (In binario: 00000000)

Se il numero è un numero con segno in complemento a 2, il bit del segno viene spostato nelle posizioni di ordine superiore.

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

Quando esegui il programma, l'uscita sarà:

 106 212 0

7. ushr

La ushrfunzione sposta lo zero nella posizione più a sinistra.

Esempio: Maiusc destro con segno e senza segno

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

Quando esegui il programma, l'output sarà:

 2 2-3 2147483645

Si noti come la funzione di spostamento a destra con segno e senza segno funziona in modo diverso per il complemento a 2.

Il complemento a 2 di 2147483645è 3.

Articoli interessanti...