Qu'est-ce que & amp; signifie en python
Salut, je suis tombé sur le code suivant
numdigits = len(cardNumber)
oddeven = numdigits & 1
ce qui se passe exactement ici? Je ne suis pas sûr de ce que le "&".
source d'informationauteur locoboy
Vous devez vous connecter pour publier un commentaire.
Réponse
La
&
symbole est un bit à bit ET de l'opérateur. Utilisé avec 1, qu'il est fondamentalement masques de la valeur à extraire le bit le plus bas, ou en d'autres termes, vous indiquera si la valeur est pair ou impair.Plus d'Infos sur Python
&
opérateurPour plus d'informations, voir: http://wiki.python.org/moin/BitwiseOperators
Pourquoi il Travaille pour vérifier Bizarre vs Même
EDIT: Ajout de cette section depuis cette réponse est d'obtenir un peu d'amour
La raison pour laquelle ANDing une valeur de 1 indique si la valeur est impaire ou peut ne pas être évident au premier abord.
La représentation binaire d'un nombre est essentiellement la somme d'une série de OUI ou NON pour chaque puissance de 2 déplacement vers la gauche de départ dans le chiffre droite avec 1, 2, 4, 8, ...
Il n'y a qu'une façon de représenter un nombre quelconque de cette façon. E. g. le nombre 13 (base 10) peut être écrit en binaire comme "1101" (ou hexadécimal comme 0xD, mais c'est à côté de la question). Voir ici:
Avis que, hormis le plus à droite des chiffres binaires, tous les autres
1
chiffres ajouter un même nombre (c'est à dire un multiple de 2) pour la somme. Donc, la seule façon d'obtenir une étrange somme finale est à ajouter que le top 1 du chiffre droite. Donc, si nous sommes curieux de savoir si un nombre est pair ou impair, on peut regarder sa représentation binaire et ignore tout, sauf pour le chiffre droite.Pour ce faire, nous utilisons le niveau du bit ET de l'opérateur. La valeur
1
en binaire est exprimé en1
:ANDing une valeur avec
1
comme cela se traduira dans1
si la valeur la plus à droite bit est défini, et0
si elle ne l'est pas.Et parce que
0
est généralement considéré comme "faux" dans la plupart des langues, et une valeur non-nulle considéré comme "vrai", nous pouvons dire plus simplement comme un raccourci:En outre,
&
est également utilisé pour prendre l'intersection de deux Python ensembles:&
est un au niveau du bit etqui est une manière efficace de le faire au niveau des bits de calculs. C'est en prenantnumdigits
et et-ing avec1
bit-par-bit.C'est une opération au niveau du bit, dans ce cas, l'attribution de zéro à
oddeven
sicardNumber
a un même nombre d'éléments (et un autre).Comme un exemple: supposons que
len(cardNumber) == 235
. Puisnumdigits == 235
qui est0b11101011
en binaire. Maintenant1
est'0b00000001'
en binaire, et quand vous "ET le" eux, au niveau du bit, vous obtiendrez:De même, si
numdigits
234), vous obtenez:Donc, en gros, c'est un obscurci moyen de vérifier si
len(cardNumber) % 2
. Probablement écrite par quelqu'un avec un C en arrière-plan, car il n'est pas très pythonic - lisibilité compte!C'est un binaire au niveau du bit ET de l'opérateur.