English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Kotlin fournit plusieurs fonctions (au format infix) pour exécuter des opérations bitwise et de déplacement. Dans cet article, vous apprendrez à effectuer des opérations bit level en Kotlin à l'aide d'exemples.
les opérateurs bitwise et les opérateurs de déplacement bitwise sont utilisés uniquement sur les types d'entiers Int et Long pour effectuer des opérations bit level.
Pour exécuter ces opérations, Kotlin fournit7fonction utilisant le symbole infix.
la fonction bitwise OU compare les bits correspondants des deux valeurs. Si l'un des deux bits est1alors1. Sinon, la valeur est 0. Par exemple,
12 = 00001100 (binaire) 25 = 00011001 (binaire) 12et25opérations bitwise OU sur 00001100 ou 00011001 ________ 00011101 val number 29 (décimal)
Exemple fun main(args: Array<String>) {1 val number 12 fun main(args: Array<String>) {2 val number 25 val result: Int result = number1 or number2 // result = number1.or(number2) println(result) }
Lors de l'exécution du programme, la sortie est :
29
et la fonction bitwise compare les bits correspondants des deux valeurs. Si les deux bits sont1la valeur est1Si l'un des deux bits est à 0, la valeur est 0. Par exemple,
12 = 00001100 (binaire) 25 = 00011001 (binaire) 12et25的按位与运算 00001100 and 00011001 ________ 00001000 = 8 (décimal)
Exemple fun main(args: Array<String>) {1 val number 12 fun main(args: Array<String>) {2 val number 25 val result: Int result = number1 and number2 // result = number1.and(number2) println(result) }
Lors de l'exécution du programme, la sortie est :
8
xor函数比较两个值的相应位。如果相应的位不同,则为1. Si les bits correspondants sont les mêmes, cela donne 0. Par exemple,
12 = 00001100 (binaire) 25 = 00011001 (binaire) 12et25l'opération de xor bit à bit 00001100 xor 00011001 ________ 00010101 val number 21 (décimal)
Exemple fun main(args: Array<String>) {1 val number 12 fun main(args: Array<String>) {2 val number 25 val result: Int result = number1 xor number2 // result = number1.xor(number2) println(result) }
Lors de l'exécution du programme, la sortie est :
21
fonction inv() inverse bit à bit. Elle fait passer chaque 0 à 1et chaque 1 à 0.
35 = 00100011 (binaire) 35l'opération de complément bit à bit 00100011 ________ 11011100 = 220 (décimal)
Exemple val number = 35 val result: Int result = number.inv() println(result) }
Lors de l'exécution du programme, la sortie est :
-36
Pourquoi devons-nous afficher -36 au lieu de 220?
C'est parce que le compilateur affiche le nombre en2complément bit à bit. Le signe négatif des nombres binaires.
Pour tout entier n, le complément de n est2complément sera-n + 1)
Décimal Binaire 2's complement --------- --------- --------------------------------------- 0 00000000 -(11111111+1) = -00000000 = -0 (décimal) 1 00000001 -(11111110+1) = -11111111 val number -256(décimal) 12 00001100 -(11110011+1) = -11110100 = -244(décimal) 220 11011100 -(00100011+1) = -00100100 = -36(décimal) Remarque : le dépassement est ignoré lors du calcul 2's complement.
35le complément bit à bit de220 (décimal)22complément de 02Le complément à deux est-36par conséquent, la sortie est-36plutôt que220.
La fonction shl déplace le modèle de bits à gauche d'un certain nombre de positions, et les zéros sont déplacés vers la position de bas.
212 (binaire: 11010100) 212 shl 1 évalue à 424 (binaire: 110101000) 212 shl 0 évalue à 212 (binaire: 11010100) 212 shl 4 évalue à 3392 (binaire: 110101000000)
Exemple val number = 212 println(number shl 1) println(number shl 0) println(number shl 4) }
Lors de l'exécution du programme, la sortie est :
424 212 3392
La fonction shr déplace le modèle de bits à droite d'un certain nombre de positions.
212 (binaire: 11010100) 212 Déplacement à droite signé 1 calculé à 106 (binaire: 01101010) 212 shr 0 calculé à 212 (binaire: 11010100) 212 Déplacement à droite signé 8 calculé à 0 (binaire: 00000000)
si le nombre est2si le complément est utilisé, le bit de signe est déplacé vers la position de高位.
Exemple val number = 212 println(number shr 1) println(number shr 0) println(number shr 8) }
println(number shr
106 212 0
Opérateur de déplacement à droite non signé (ushr)
Exemple fun main(args: Array<String>) {1 val number 5 fun main(args: Array<String>) {2 val number -5 //= println(number1 Déplacement à droite signé 1) //Déplacement à droite non signé println(number1 ushr 1) //= println(number2 Déplacement à droite signé 1) //Déplacement à droite non signé println(number2 ushr 1) }
Lors de l'exécution du programme, la sortie est :
2 2 -3 2147483645
Attention, pour2Le complément à deux, les fonctions de déplacement à droite signé et non signé fonctionnent de différentes manières.
2147483645de2Le complément à deux est3。