Maison  >  Article  >  développement back-end  >  Comment résoudre les erreurs arithmétiques au niveau du bit de Python ?

Comment résoudre les erreurs arithmétiques au niveau du bit de Python ?

PHPz
PHPzoriginal
2023-06-24 19:14:351025parcourir

Dans la programmation Python, les opérations au niveau du bit sont une méthode d'opération très courante utilisée pour exploiter les nombres binaires. Cependant, lors de l'exécution d'opérations sur les bits dans le code Python, des erreurs se produisent parfois, entraînant un dysfonctionnement du programme ou l'obtention de résultats incorrects. Cet article présentera quelques erreurs courantes de fonctionnement des bits Python et fournira les solutions correspondantes.

  1. Erreur : Utilisation de nombres négatifs pour les opérations au niveau du bit

Solution : Les opérateurs au niveau du bit en Python ne peuvent être appliqués qu'aux entiers, et si vous utilisez des nombres négatifs pour les opérations au niveau du bit, cela peut conduire à des résultats incorrects. Par conséquent, lorsque vous effectuez des opérations sur les bits, assurez-vous que les valeurs utilisées sont des entiers non négatifs. Si vous devez effectuer des opérations au niveau du bit sur un nombre négatif, vous devez le convertir sous sa forme complémentaire. Par exemple, le code suivant provoque une erreur :

a = -3
b = a << 2 #左移运算
print(b) #输出-12

Le code ci-dessus décale -3 vers la gauche de deux places, ce qui donne -12 au lieu du -6 attendu. En effet, en Python, les nombres négatifs sont stockés sous forme de complément et lors de l'opération de décalage vers la gauche, le bit de signe de poids fort sera également décalé vers la gauche, ce qui entraînera une erreur dans le résultat. Pour résoudre ce problème, vous devez convertir le nombre négatif en un entier non signé :

a = -3
a = a & 0xffffffff #将负数转换为无符号整数
b = a << 2 #左移运算
b = b & 0xffffffff #确保结果为32位无符号整数
if b >> 31: #判断结果是否为负数
    b = ~b ^ 0xffffffff #将32位无符号整数转换为补码形式
    b = -b - 1 #将负数转换为十进制数
print(b) #输出-6

Dans le code ci-dessus, nous convertissons d'abord le nombre négatif -3 en un entier non signé, puis effectuons des opérations au niveau du bit et reconvertissons le résultat en un entier signé. entier. Plus précisément, nous effectuons d’abord une opération ET au niveau du bit sur -3 et 0xffffffff pour obtenir un entier non signé de 32 bits. Effectuez ensuite une opération de décalage vers la gauche, puis au niveau du bit ET le résultat de l'opération avec 0xffffffff pour vous assurer que le résultat est un entier non signé de 32 bits. Ensuite, si le résultat du décalage vers la gauche est un nombre négatif, vous devez le convertir en complément à deux, et enfin convertir le nombre complémentaire à deux en nombre décimal.

  1. Erreur : j'ai oublié d'ajouter des parenthèses lors de l'utilisation d'opérateurs au niveau du bit

Solution : En Python, la priorité des opérateurs est en règle. Si vous oubliez d'ajouter des parenthèses, cela peut provoquer des erreurs d'opération au niveau du bit. Par exemple, le code suivant :

a = 3 | 4 << 2
print(a) #输出19

Le résultat attendu du code ci-dessus est 7, qui est le résultat d'un décalage vers la gauche de 2 bits au-dessus de 3 ou 4. Mais en fait, comme la priorité des opérateurs de bits est supérieure à celle des opérateurs de décalage de bits, le code exécutera d'abord 4 << 2, puis exécutera 3 | (4 << 2), ce qui entraînera une erreur dans le résultat. Pour résoudre ce problème, vous devez ajouter des parenthèses et placer l'opération de décalage de bit avant l'opération de bit :

a = (3 | 4) << 2
print(a) #输出28

Dans le code ci-dessus, nous utilisons des parenthèses pour traiter 3 | 4 dans son ensemble, puis effectuons l'opération de décalage à gauche pour obtenir le résultat attendu 28 .

  1. Erreur : j'ai oublié de convertir en forme binaire lors de l'utilisation d'opérations au niveau du bit

Solution : lorsque vous effectuez des opérations au niveau du bit en Python, vous devez faire attention à la conversion des valeurs sous forme binaire afin d'utiliser correctement les nombres binaires. Par exemple, le code suivant :

a = 0b1010
b = a & 1011
print(bin(b)) #输出0b1000

Le résultat attendu du code ci-dessus est 0b1000, qui est le nombre binaire obtenu après l'opération ET au niveau du bit de a et 1011. Mais en fait, comme le nombre décimal 1011 sans le préfixe 0b ou 0B est utilisé pour les opérations sur les bits, le résultat est incorrect. Pour résoudre ce problème, vous devez convertir 1011 en forme binaire, par exemple :

a = 0b1010
b = a & 0b1011
print(bin(b)) #输出0b1000

Dans le code ci-dessus, nous convertissons 1011 en forme binaire 0b1011, puis effectuons des opérations sur les bits pour obtenir le résultat attendu 0b1000.

En résumé, les opérations au niveau du bit en Python sont une méthode de calcul très pratique, mais des erreurs sont susceptibles de se produire lors de l'exécution d'opérations au niveau du bit. Pour éviter ces erreurs, vous devez veiller à utiliser les types numériques, l'ordre des opérateurs et la forme numérique corrects. Si vous rencontrez d'autres erreurs courantes de fonctionnement des bits, veuillez les partager dans la zone de commentaires.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn