Opérations bit à bit NumPy
Les opérations bit à bit sont une classe d'opérations effectuées au niveau des bits des nombres binaires. Elles opèrent directement sur les bits individuels des nombres binaires sans tenir compte de la valeur globale du nombre.
NumPy fournit une série de fonctions d'opérations bit à bit qui permettent d'effectuer des opérations bit à bit sur les éléments des tableaux. Ces opérations sont similaires aux opérateurs bit à bit de Python, mais elles agissent sur les tableaux NumPy, prennent en charge le traitement vectorisé et offrent des performances supérieures.
Les opérations bit à bit sont largement utilisées en informatique pour l'optimisation et le traitement de données de bas niveau.
NumPy bitwise_Les fonctions commençant par "bitwise" sont des fonctions d'opération bit à bit.
Les opérations bit à bit de NumPy incluent les fonctions suivantes :
| Opération | Fonction/Opérateur | Description |
|---|---|---|
| ET bit à bit | numpy.bitwise_and(x1, x2) | Effectue une opération AND bit à bit sur chaque élément du tableau. |
| OU bit à bit | numpy.bitwise_or(x1, x2) | Effectue une opération OR bit à bit sur chaque élément du tableau. |
| OU exclusif bit à bit | numpy.bitwise_xor(x1, x2) | Effectue une opération XOR bit à bit sur chaque élément du tableau. |
| NON bit à bit | numpy.invert(x) | Effectue une opération NOT bit à bit sur chaque élément du tableau. |
| Décalage à gauche | numpy.left_shift(x1, x2) | Décale chaque élément du tableau vers la gauche du nombre de bits spécifié. |
| Décalage à droite | numpy.right_shift(x1, x2) | Décale chaque élément du tableau vers la droite du nombre de bits spécifié. |
Exemple
arr1 = np.array([True, False, True], dtype=bool)
arr2 = np.array([False, True, False], dtype=bool)
result_and = np.bitwise_and(arr1, arr2)
result_or = np.bitwise_or(arr1, arr2)
result_xor = np.bitwise_xor(arr1, arr2)
result_not = np.bitwise_not(arr1)
print("AND:", result_and) # [False, False, False]
print("OR:", result_or) # [True, True, True]
print("XOR:", result_xor) # [True, True, True]
print("NOT:", result_not) # [False, True, False]
# NON bit à bit
arr_invert = np.invert(np.array([1, 2], dtype=np.int8))
print("Invert:", arr_invert) # [-2, -3]
# Opération de décalage à gauche
arr_left_shift = np.left_shift(5, 2)
print("Left Shift:", arr_left_shift) # 20
# Opération de décalage à droite
arr_right_shift = np.right_shift(10, 1)
print("Right Shift:", arr_right_shift) # 5
Vous pouvez également utiliser"&", "~", "|" et "^"et d'autres opérateurs pour effectuer des calculs :
Opération AND (&) :Lorsque les deux chiffres sur les bits correspondants sont 1, le résultat est 1 ; sinon, le résultat est 0.
Par exemple : 1010 & 1100 = 1000
Opération OU (|) :Lorsqu'au moins un des deux chiffres des bits correspondants est 1, le résultat est 1 ; sinon, le résultat est 0.
Par exemple : 1010 | 1100 = 1110
Opération OU exclusif (^) :Lorsque les deux chiffres des bits correspondants sont différents, le résultat est 1 ; lorsqu'ils sont identiques, le résultat est 0.
Par exemple : 1010 ^ 1100 = 0110
Opération NON (~) :Inverse chaque bit du nombre, c'est-à-dire que 0 devient 1 et 1 devient 0.
Par exemple : ~1010 = 0101
Opération de décalage à gauche (<<) :Décale tous les bits du nombre vers la gauche du nombre de bits spécifié, en remplissant le côté droit avec des 0.
Par exemple : 1010 << 2 = 101000
Opération de décalage à droite (>>) :Décale tous les bits du nombre vers la droite du nombre de bits spécifié, en remplissant le côté gauche selon le bit de signe ou avec des zéros.
Par exemple : 1010 >> 2 = 0010
bitwise_and
La fonction bitwise_and() effectue une opération ET bit à bit sur la forme binaire des entiers d'un tableau.
Exemple
Le résultat de sortie est:
13 和 17 的二进制形式: 0b1101 0b10001 13 和 17 的位与: 1
L'exemple ci-dessus peut être illustré par le tableau suivant :
| 1 | 1 | 0 | 1 | ||
|---|---|---|---|---|---|
| ET | |||||
| 1 | 0 | 0 | 0 | 1 | |
| Résultat de l'opération | 0 | 0 | 0 | 0 | 1 |
Les règles de l'opération ET bit à bit sont les suivantes :
| A | B | ET |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 0 |
bitwise_or
La fonction bitwise_or() effectue une opération OU bit à bit sur la forme binaire des entiers d'un tableau.
Exemple
Le résultat de sortie est:
13 和 17 的二进制形式: 0b1101 0b10001 13 和 17 的位或: 29
L'exemple ci-dessus peut être illustré par le tableau suivant :
| 1 | 1 | 0 | 1 | ||
|---|---|---|---|---|---|
| OR | |||||
| 1 | 0 | 0 | 0 | 1 | |
| Résultat de l'opération | 1 | 1 | 1 | 0 | 1 |
Les règles de l'opération OU bit à bit sont les suivantes :
| A | B | OR |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
invert
La fonction invert() effectue une opération NON bit à bit sur les entiers d'un tableau, c'est-à-dire que 0 devient 1 et 1 devient 0.
Pour les entiers signés, prenez le complément du nombre binaire, puis ajoutez 1. Dans un nombre binaire, le bit de poids fort valant 0 indique un nombre positif, et le bit de poids fort valant 1 indique un nombre négatif.
Regardons les étapes de calcul de ~1 :
- va
1(Ceci s'appelle : code original) Convertir en binaire =00000001 - Inversion bit à bit =
11111110 - Nous constatons que le bit de signe (c'est-à-dire le bit de poids fort) est
1(indiquant un nombre négatif), inversez les autres chiffres sauf le bit de signe =10000001 - Ajoutez 1 au dernier bit pour obtenir son complément =
10000010 - Reconvertir en décimal =
-2
| Expression | Valeur binaire (complément à deux) | Valeur décimale |
|---|---|---|
| 5 | 00000000 00000000 00000000 00000101 | 5 |
| ~5 | 11111111 11111111 11111111 11111010 | -6 |
Exemple
Le résultat de sortie est:
13 的位反转,其中 ndarray 的 dtype 是 uint8: [242] 13 的二进制表示: 00001101 242 的二进制表示: 11110010
left_shift
La fonction left_shift() décale la forme binaire des éléments du tableau vers la gauche d'un nombre spécifié de positions, en ajoutant un nombre égal de 0 à droite.
Exemple
Le résultat de sortie est:
将 10 左移两位: 40 10 的二进制表示: 00001010 40 的二进制表示: 00101000
right_shift
La fonction right_shift() décale la forme binaire des éléments d'un tableau vers la droite d'un nombre spécifié de positions, en ajoutant un nombre égal de 0 à gauche.
Exemple
Le résultat de sortie est:
将 40 右移两位: 10 40 的二进制表示: 00101000 10 的二进制表示: 00001010Autres extensions