Selon ma compréhension des opérateurs binaires, le code ci-dessous ne doit s'exécuter que lorsque i et j sont égaux à 5, pour toutes les autres valeurs de i et j, si la condition doit être évaluée à False. mais j'obtiens le résultat suivant:
# i, j, i & j, binary value of i, binary value of j, bitwise and of i == 5 and j == 5 5 5 5 0b1 0b1 True 5 7 5 0b1 0b0 False 5 13 5 0b1 0b0 False 5 15 5 0b1 0b0 False 5 21 5 0b1 0b0 False 5 23 5 0b1 0b0 False 5 29 5 0b1 0b0 False
for i in range(30): for j in range(30): if i == 5 & j == 5: print(i, j, i & j, bin(i==5), bin(j==5), i == 5 & j == 5)
Questions:
La valeur binaire de i et j est 1 uniquement pour le 1er cas, alors pourquoi d'autres cas sont-ils imprimés?
pourquoi le résultat est imprimé là où i & j est évalué à 5
Si je change l'ordre des conditions dans l'instruction if ci-dessus, i acquiert les valeurs 5, 7, 13, 15, 21, 23, 29 tandis que j reste 5 et les autres sorties sont également les mêmes. pourquoi?
Pour le code ci-dessus, i = 7 et j = 5, i & j est également évalué à 5. Alors pourquoi il n'est pas imprimé?
3 Réponses :
Réponse courte vous avez manqué les crochets:
for x in range(0, 32): print(x & 2, bin(x), bin(2), bin(x & 2))
Commencez par évaluer (i == 5) et (j == 5) puis comparez le booléen résultant avec l'autre booléen résultant. p >
Ou comme mentionné ci-dessous, utilisez simplement et. Si vous voulez explorer un peu plus cela, regardez simplement le résultat de ce qui suit:
for i in range(30): for j in range(30): if (i == 5) & (j == 5): print(i, j, i & j, bin(i==5), bin(j == 5), i == 5 & j == 5)
Comment cela fonctionne en détail, vous pouvez trouver ici:
https://wiki.python.org/moin/BitwiseOperators
p>
Utilisez l'opérateur "et" au lieu de "&". cela résoudra votre problème.
et: opérateur logique
&: opérateur binaire
5 5 5 0b1 0b1 True
Résultat:
for i in range(30): for j in range(30): if i == 5 and j == 5: print(i, j, i & j, bin(i==5), bin(j==5), i == 5 & j == 5)
Référence 1:
Référence 2:
pourquoi est-ce le cas? Veuillez ajouter une explication, ou même simplement un lien, expliquant pourquoi cela est nécessaire / quelle est la différence.
@GezaKerecsenyi, j'étais en train de modifier ma réponse pour donner plus de détails.
De la documentation
Contrairement à C, toutes les opérations de comparaison en Python ont la même priorité, qui est inférieure à celle de toute opération arithmétique, de décalage ou bit à bit . Contrairement à C, les expressions comme a
donc ici:
i == 5 and j == 5
ce qui se passe, c'est que 5 & j
est testé contre i
et 5
pour l'égalité. Donc, la mise entre parenthèses fonctionnerait, mais la bonne façon est d'utiliser les opérateurs logiques et
qui ont une priorité plus élevée:
i == 5 & j == 5
it également des courts-circuits , ce qui signifie que si i! = 5
, j
n'est même pas testé (exécution plus rapide). S'applique parfaitement à cet exemple.
Merci de répondre. J'ai réalisé mon erreur un jour plus tard.
Vérifiez votre code s'il vous plaît. J'obtiens des résultats différents. Quelle version de Python utilisez-vous?