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


Comment exprimer un nombre entier en 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 utilisez-vous les littéraux pour exprimer des binaires en Python?


Résumé des réponses

  • Python 2.5 et versions antérieures: peut exprimer des binaires en utilisant int('01010101111',2) mais pas avec un littéral.
  • Python 2.5 et antérieur: il y a en aucune façon exprimer des littéraux binaires.
  • Python 2.6 beta: Vous pouvez faire comme ça: 0b1100111 ou 0B1100111.
  • Python 2.6 beta: permettra également 0o27 ou 0O27 (le deuxième caractère est la lettre O) pour représenter un octal.
  • Python 3.0 bêta: identique à la version 2.6, mais ne permettra plus aux anciens 027 syntaxe pour les octals.

305
2017-08-04 18:20


origine


Réponses:


Pour référence-avenir Possibilités Python:
À partir de Python 2.6, vous pouvez exprimer des littéraux binaires en utilisant le préfixe 0b ou 0B:

>>> 0b101111
47

Vous pouvez également utiliser le nouveau poubelle Fonction pour obtenir la représentation binaire d'un nombre:

>>> bin(173)
'0b10101101'

Version de développement de la documentation: Quoi de neuf dans Python 2.6


244
2017-08-16 12:35



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

Autrement.


64
2017-08-04 18:34



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 d'un, par exemple:

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

Du Python 3 docs, ce sont les moyens de fournir des littéraux entiers en Python:

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

integer      ::=  decinteger | bininteger | octinteger | hexinteger
decinteger   ::=  nonzerodigit (["_"] digit)* | "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     ::=  digit | "a"..."f" | "A"..."F"

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

Notez que les zéros en tête dans un nombre décimal différent de zéro ne sont pas autorisés.   Ceci est pour la désambiguïsation avec les littéraux octaux de style C, que 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 traits de soulignement 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 0b ou 0B préfixe:

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

Si vous le passez 0 comme base, il supposera la base 10 si la chaîne ne spécifie pas avec un préfixe:

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

Conversion de binaire int 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 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'

13
2018-05-14 11:58



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

1
2018-06-21 22:48



Dans la mesure où je peux dire à Python, jusqu'à 2.5, ne supporte que les littéraux hexadécimaux et octaux. J'ai trouvé quelques discussions sur l'ajout de binaires aux futures versions mais rien de définitif.


-1
2017-08-04 18:26



Je suis sûr que c'est l'une des choses à 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.


-1
2017-08-04 18:27