Comment exprimez-vous les littéraux binaires en Python?

Comment exprimer un entier sous la forme d'un nombre binaire avec des littéraux Python?

J'étais facilement capable de trouver la réponse pour hex:

>>> 0x12AF
4783
>>> 0x100
256

et octal:

>>> 01267
695
>>> 0100
64

Comment utiliser les littéraux pour exprimer des binaires en Python?


Résumé des réponses

  • Python 2.5 et versions antérieures: peut exprimer un binaire en utilisant int ('01010101111', 2) mais pas avec un littéral.
  • Python 2.5 et versions antérieures: il n'y a pas moyen d'exprimer des littéraux binaires.
  • Python 2.6 beta: Vous pouvez faire comme ça: 0b1100111 ou 0B1100111 .
  • Python 2.6 beta: permettra aussi 0o27 ou 0O27 (le deuxième caractère est la lettre O) pour représenter un octal.
  • Python 3.0 beta: Identique à 2.6, mais n'autorisera plus l'ancienne syntaxe 027 pour les octals.
0

6 Réponses

>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255

Autrement.

0
ajouté
C'est intéressant quand vous avez des chaînes, mais si vous travaillez avec des nombres purs, vous ajoutez des calculs inutiles au code.
ajouté l'auteur Daniel Möller, source

Je suis assez sûr que c'est une des choses dues à changer dans Python 3.0 avec peut-être bin() pour aller avec hex() et oct ().

MODIFIER: La réponse d'Ibrandy est correcte dans tous les cas.

0
ajouté

As far as I can tell Python, up through 2.5, only supports hexadecimal & octal literals. I did find some discussions about adding binary to future versions but nothing definite.

0
ajouté

Comment exprimez-vous les littéraux binaires en Python?

Ce ne sont pas des littéraux «binaires», mais plutôt des «littéraux entiers». Vous pouvez exprimer des littéraux entiers avec un format binaire avec un 0 suivi d'un B ou b suivi d'une série de zéros et de uns, par exemple :

>>> 0b0010101010
170
>>> 0B010101
21

Dans le docs de Python, voici les moyens de fournir des nombres entiers littéraux en Python:

Les littéraux entiers sont décrits par les définitions lexicales suivantes:

 entier :: = decinteger | bininteger | octinteger | hexinteger
decinteger :: = nonzerodigit (["_"] chiffre) * | "0" + (["_"] "0") *
bininteger :: = "0" ("b" | "B") (["_"] bindigit) +
octinteger :: = "0" ("o" | "O") (["_"] octdigit) +
hexinteger :: = "0" ("x" | "X") (["_"] hexdigit) +
nonzerodigit :: = "1" ... "9"
digit :: = "0" ... "9"
bindigit :: = "0" | "1"
octdigit :: = "0" ... "7"
hexdigit :: = chiffre | "a" ... "f" | "UN F"
 
     

Il n'y a pas de limite à la longueur des littéraux entiers hormis ce que   peut être stocké dans la mémoire disponible.

     

Notez que les zéros en tête d'un nombre décimal différent de zéro ne sont pas autorisés.   Ceci est pour la désambiguïsation avec des littéraux octaux de style C, qui Python   utilisé avant la version 3.0.

     

Quelques exemples de littéraux entiers:

  7 2147483647 0o177 0b100110111
3 79228162514264337593543950336 0o377 0xdeadbeef
      100_000_000_000 0b_1110_0101
 
     

Modifié dans la version 3.6: Les underscores sont désormais autorisés à des fins de regroupement dans les littéraux.

Autres façons d'exprimer binaire:

Vous pouvez avoir les zéros et les uns dans un objet chaîne qui peut être manipulé (bien que vous devriez probablement faire des opérations au niveau du bit dans la plupart des cas) - juste passer la chaîne de zéros et de uns et la base à partir de laquelle convertir (2 ):

>>> int('010101', 2)
21

Vous pouvez éventuellement avoir le préfixe 0b ou 0B :

>>> int('0b0010101010', 2)
170

Si vous lui passez 0 comme base, il assumera la base 10 si la chaîne ne spécifie pas de préfixe:

>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21

Conversion d'int retour en binaire lisible par l'homme:

Vous pouvez passer un entier à bin pour voir la représentation sous forme de chaîne d'un littéral binaire:

>>> bin(21)
'0b10101'

Et vous pouvez combiner bin et int pour aller et venir:

>>> bin(int('010101', 2))
'0b10101'

Vous pouvez également utiliser une spécification de format si vous souhaitez avoir une largeur minimale avec des zéros précédents:

>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'
0
ajouté

For reference—future Python possibilities:
Starting with Python 2.6 you can express binary literals using the prefix 0b or 0B:

>>> 0b101111
47

Vous pouvez également utiliser la nouvelle fonction bin pour obtenir la représentation binaire d'un nombre:

>>> bin(173)
'0b10101101'

Development version of the documentation: What's New in Python 2.6

0
ajouté

0 au début indique ici que la base est 8 (pas 10), ce qui est assez facile à voir:

>>> int('010101', 0)
4161

Si vous ne commencez pas avec un 0, alors python suppose que le nombre est la base 10.

>>> int('10101', 0)
10101
0
ajouté