English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Kotlin proporciona varias funciones (en forma infix) para ejecutar operaciones de nivel de bits y desplazamiento. En este artículo, aprenderás a realizar operaciones a nivel de bits en Kotlin con ejemplos.
Se utilizan operadores de nivel de bits y operadores de desplazamiento solo en dos tipos de enteros (Int y Long) para ejecutar operaciones a nivel de bits.
Para ejecutar estas operaciones, Kotlin proporciona7Se utiliza un símbolo infixo.
La función or compara los bits correspondientes de dos valores. Si uno de los bits es1entonces es1. De lo contrario, es 0. Por ejemplo,
12 = 00001100 (binario) 25 = 00011001 (binario) 12y25Operación lógica OR bit a bit 00001100 or 00011001 ________ 00011101 = 29 (decimal)
fun main(args: Array<String>) { val number1 = 12 val number2 = 25 val result: Int result = number1 or number2 // result = number1.or(number2) println(result) }
Al ejecutar el programa, la salida será:
29
La función and compara los bits correspondientes de dos valores. Si ambos bits son1el valor es1Si uno de los dos bits es 0, el valor es 0. Por ejemplo,
12 = 00001100 (binario) 25 = 00011001 (binario) 12y25的按位与运算 00001100 and 00011001 ________ 00001000 = 8 (decimal)
fun main(args: Array<String>) { val number1 = 12 val number2 = 25 val result: Int result = number1 and number2 // result = number1.and(number2) println(result) }
Al ejecutar el programa, la salida será:
8
xor函数比较两个值的相应位。如果相应的位不同,则为1. Si los bits correspondientes son iguales, es 0. Por ejemplo,
12 = 00001100 (binario) 25 = 00011001 (binario) 12y25la operación xor bit a bit 00001100 xor 00011001 ________ 00010101 = 21 (decimal)
fun main(args: Array<String>) { val number1 = 12 val number2 = 25 val result: Int result = number1 xor number2 // result = number1.xor(number2) println(result) }
Al ejecutar el programa, la salida será:
21
la función inv() realiza un no bit a bit. Hace que cada 0 a 1y cada 1 a 0.
35 = 00100011 (binario) 35la operación de complemento bit a bit 00100011 ________ 11011100 = 220 (decimal)
fun main(args: Array<String>) { val number = 35 val result: Int result = number.inv() println(result) }
Al ejecutar el programa, la salida será:
-36
¿Por qué queremos imprimir -36 en lugar de 220?
porque el compilador muestra el número2el complemento bit a bit. El signo negativo del número binario.
Para cualquier entero n, el complemento de n es2su complemento será-(n + 1).
Decimal Binario 2's complement --------- --------- --------------------------------------- 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: Se ignora el desbordamiento mientras se calcula 2's complement.
35el complemento bit a bit de220 (decimal).22el complemento de 02El complemento a dos es-36Por lo tanto, la salida es-36en lugar de220.
la función shl desplaza el patrón de bits a la izquierda una cantidad específica de posiciones, y los ceros se desplazan a la posición baja.
212 (binario: 11010100) 212 shl 1 evalúa a 424 (binario: 110101000) 212 shl 0 evalúa a 212 (binario: 11010100) 212 shl 4 evalúa a 3392 (binario: 110101000000)
fun main(args: Array<String>) { val number = 212 println(number shl 1) println(number shl 0) println(number shl 4) }
Al ejecutar el programa, la salida será:
424 212 3392
la función shr desplaza el patrón de bits a la derecha en una cantidad de posiciones especificada.
212 (binario: 11010100) 212 shr 1 se calcula como 106 (binario: 01101010) 212 shr 0 se calcula como 212 (binario: 11010100) 212 shr 8 se calcula como 0 (binario: 00000000)
si el número es2su número complementario, entonces desplaza el bandera a la posición alta.
fun main(args: Array<String>) { val number = 212 println(number shr) 1) println(number shr 0) println(number shr) 8) }
Al ejecutar el programa, la salida será:
106 212 0
La función ushr desplaza ceros a la posición más izquierda.
fun main(args: Array<String>) { val number1 = 5 val number2 = -5 //Desplazamiento a la derecha con signo println(number1 shr 1) //Desplazamiento a la derecha sin signo println(number1 ushr 1) //Desplazamiento a la derecha con signo println(number2 shr 1) //Desplazamiento a la derecha sin signo println(number2 ushr 1) }
Al ejecutar el programa, la salida será:
2 2 -3 2147483645
Tenga en cuenta que para2El complemento a dos, la función de desplazamiento a la derecha con signo y la función de desplazamiento a la derecha sin signo trabajan de manera diferente.
2147483645de2El complemento a dos es3.