2017-05-18 2 views
1

Je suis (un peu) familier avec son complément mais je pourrais utiliser un rappel concernant Python 2.7. Pourquoi le ~0b1 affiche-t-il -2? Je comprends que le complément à un convertit 1s en 0 et vice versa. Je m'attendais à ~0b1 pour imprimer 0b0 ou 0.Pourquoi ~ 0b1 imprime -2 en Python 2.7?

Est-ce que print convertit automatiquement les littéraux d'octets en int?

Toute aide est appréciée.

+3

Ce n'est pas un * octet littéral *. C'est un autre type de littéral 'int' qui vous permet d'exprimer votre' int' en binaire *. Donc il n'y a pas de conversion car * c'était toujours un 'int' *. –

+0

@ juanpa.arrivillaga Merci pour le commentaire. Cela explique un peu. – MSD

+0

Donc, en d'autres termes, '0b10000',' 0x10', et '16' sont tous des littéraux pour le même objet' int'. par défaut, lorsqu'un int est imprimé sur un écran, sa représentation décimale est imprimée. –

Répondre

1

0b1 est juste une autre façon d'écrire 0b0000...01 (entier 1). Avec ~ vous obtiendrez le complément sage et peu 1 -> 00 -> 1 (y compris le bit de signe) et vous obtenez:

0b111....10 

qui est -2.

+0

Votre réponse, combinée avec la meilleure réponse à cette question (http://stackoverflow.com/questions/8305199/the-tilde-operator-in-python) m'a vraiment aidé à comprendre ce qui se passait. Merci beaucoup! – MSD