2017-10-04 1 views
0

Pourquoi bit non ne pas agir comme prévu pour les bits de basculement? Voir par exemple ci-dessous:La signification de Bit-wise PAS en Python

a = 5 
print(bin(a)) 
b = ~a 
print(bin(b)) 

Ceci est la sortie:

0b101 
-0b110 

La question est pourquoi le premier bit de la gauche n'est pas basculée?

Considérant que la documentation Python dit:

~ x Renvoie le complément de x - le numéro que vous obtenez en changeant chaque 1 pour 0 et chacun 0 pour 1.


Editer: Êtes-vous en train de dire que "~" n'est pas l'opérateur pour le basculement simple des bits, mais à la place c'est l'opérateur pour le complément à deux? Si oui, pourquoi la phrase citée de la documentation ne le dit pas. La phrase ci-dessus de la documentation de Pyhton ne signifie pas cela pour moi.

+0

C'est le complément de deux –

+0

Notez le '-' devant' -0b110'. Il ne peut pas vous montrer une série infinie de '1 'qui se termine à gauche, donc il vous montre' bin (abs (b)) 'avec un signe' -' devant. – user2357112

+0

Préambule - https://wiki.python.org/moin/BitwiseOperators –

Répondre

4

Il est basculant tous les bits. Tout d'entre eux, y compris un nombre infini de zéros en tête, en produisant un nombre infini de ceux conduisant:

0b...111111111111111111111111111111111111111111111111111010 

car python simule une représentation bits infini, pas de 3 bits ou de 32 bits ou 64 bits ou tout nombre fini. Python ne peut pas afficher un nombre infini d'en-têtes, donc à la place, il affiche bin(abs(b)) avec un signe - devant. abs(b) est 6 et bin(6) est '0b110', donc vous voyez

-0b110 
+0

Ceci est une très bonne réponse. Où avez-vous eu l'info? – lmiguelvargasf

+0

@lmiguelvargasf: Il est difficile de se souvenir de tout ce que j'ai lu, mais au moins une de mes sources était probablement la [documentation du modèle de données Python] (https://docs.python.org/3/reference/datamodel.html # the-standard-type-hierarchy), qui dit "Pour les opérations de décalage et de masquage, une représentation binaire est supposée, et les nombres négatifs sont représentés dans une variante du complément 2 qui donne l'illusion d'une chaîne infinie de bits de signe s'étendant vers la gauche. " – user2357112