Operaciones Kotlin Bitwise y Bitshift (con ejemplos)

Kotlin proporciona varias funciones (en forma de infijo) para realizar operaciones bit a bit y de desplazamiento de bits. En este artículo, aprenderá a realizar operaciones de nivel de bits en Kotlin con la ayuda de ejemplos.

Los operadores bit a bit y de desplazamiento de bit se utilizan solo en dos tipos integrales ( Inty Long) para realizar operaciones a nivel de bit.

Para realizar estas operaciones, Kotlin proporciona 7 funciones usando notación infija.

1. o

La orfunción compara los bits correspondientes de dos valores. Si cualquiera de los bits es 1, da 1. Si no, da 0. Por ejemplo,

 12 = 00001100 (en binario) 25 = 00011001 (en binario) O bit a bit Operación de 12 y 25 00001100 o 00011001 ________ 00011101 = 29 (en decimal)

Ejemplo: bit a bit u operación

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

Cuando ejecute el programa, la salida será:

 29

2. y

La andfunción compara los bits correspondientes de dos valores. Si ambos bits son 1, se evalúa como 1. Si cualquiera de los bits es 0, se evalúa como 0. Por ejemplo,

 12 = 00001100 (en binario) 25 = 00011001 (en binario) Operación de bits de 12 y 25 00001100 y 00011001 ________ 00001000 = 8 (en decimal)

Ejemplo: bit a bit y operación

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

Cuando ejecute el programa, la salida será:

 8

3. xor

La xorfunción compara los bits correspondientes de dos valores. Si los bits correspondientes son diferentes, da 1. Si los bits correspondientes son iguales, da 0. Por ejemplo,

 12 = 00001100 (en binario) 25 = 00011001 (en binario) O bit a bit Operación de 12 y 25 00001100 xor 00011001 ________ 00010101 = 21 (en decimal)

Ejemplo: operación xor bit a bit

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

Cuando ejecute el programa, la salida será:

 21

4. inv ()

La función inv () invierte el patrón de bits. Hace cada 0 a 1 y cada 1 a 0.

 35 = 00100011 (en binario) Complemento bit a bit Operación de 35 00100011 ________ 11011100 = 220 (en decimal)

Ejemplo: complemento bit a bit

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

Cuando ejecute el programa, la salida será:

 -36

¿Por qué obtenemos una salida -36 en lugar de 220?

Es porque el compilador muestra el complemento a 2 de ese número; notación negativa del número binario.

Para cualquier número entero n, el complemento a 2 de n será -(n+1).

 Complemento de 2 decimal binario --------- --------- ---------------------------- ----------- 0 00000000 - (11111111 + 1) = -00000000 = -0 (decimal) 1 00000001 - (11111110 + 1) = -11111111 = -256 (decimal) 12 00001100 - (11110011 +1) = -11110100 = -244 (decimal) 220 11011100 - (00100011 + 1) = -00100100 = -36 (decimal) Nota: El desbordamiento se ignora al calcular el complemento a 2.

El complemento bit a bit de 35 es 220 (en decimal). El complemento a 2 de 220 es -36. Por lo tanto, la salida es -36 en lugar de 220.

5. shl

La shlfunción desplaza el patrón de bits hacia la izquierda en un cierto número de bits especificados, y los bits cero se desplazan a las posiciones de orden inferior.

 212 (en binario: 11010100) 212 shl 1 se evalúa como 424 (en binario: 110101000) 212 shl 0 se evalúa como 212 (en binario: 11010100) 212 shl 4 se evalúa como 3392 (en binario: 110101000000)

Ejemplo: desplazamiento a la izquierda bit a bit

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

Cuando ejecute el programa, la salida será:

 424212 3392

6. shr

La shrfunción desplaza el patrón de bits hacia la derecha por cierto número de bits especificados.

 212 (en binario: 11010100) 212 shr 1 se evalúa como 106 (en binario: 01101010) 212 shr 0 se evalúa como 212 (en binario: 11010100) 212 shr 8 se evalúa como 0 (en binario: 00000000)

Si el número es un número con signo de complemento a 2, el bit de signo se desplaza a las posiciones de orden superior.

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

Cuando ejecute el programa, la salida será:

 106 212 0

7. ushr

La ushrfunción cambia el cero a la posición más a la izquierda.

Ejemplo: desplazamiento a la derecha firmado y no firmado

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

Cuando ejecute el programa, la salida será:

 2 2-3 2147483645

Observe cómo la función de desplazamiento a la derecha con y sin signo funciona de manera diferente para el complemento a 2.

El complemento a 2 de 2147483645es 3.

Articulos interesantes...