Comment exprimez-vous littéraux binaires en Python?

voix
303

Comment exprimez-vous un entier comme un nombre binaire avec littéraux Python?

Je suis facilement en mesure de trouver la réponse pour hex:

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

et octal:

>>> 01267
695
>>> 0100
64

Comment utilisez-vous pour exprimer littéraux binaire en Python?


Résumé des réponses

  • Python 2.5 et versions antérieures: peuvent exprimer binaire à l' aide int('01010101111',2)mais pas avec un littéral.
  • Python 2,5 et plus haut: il n'y a aucun moyen pour exprimer littéraux binaires.
  • Python 2.6 beta: Vous pouvez faire comme ceci: 0b1100111ou 0B1100111.
  • Python 2.6 bêta: également permettre 0o27ou 0O27(deuxième caractère est la lettre O) pour représenter un octal.
  • Python 3.0 beta: Identique 2.6, mais ne permettra plus l'ancienne 027syntaxe pour octal.
Créé 04/08/2008 à 19:20
source utilisateur
Dans d'autres langues...                            


6 réponses

voix
241

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

>>> 0b101111
47

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

>>> bin(173)
'0b10101101'

La version de développement de la documentation: Quoi de neuf en Python 2.6

Créé 16/08/2008 à 13:35
source utilisateur

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

Autrement.

Créé 04/08/2008 à 19:34
source utilisateur

voix
11

Comment exprimez-vous littéraux binaires en Python?

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

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

De l'python 3 documents , ce sont les moyens de fournir des littéraux entiers dans le python:

des entiers sont décrits par les définitions lexicales suivants:

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 pour la longueur de littéraux entiers en dehors de ce qui peut être stocké dans la mémoire disponible.

Notez que des zéros dans un premier plan nombre décimal non nul ne sont pas autorisés. Ceci est pour homonymie avec littéraux octal C-style, 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

Changement dans la version 3.6: soulignements sont désormais autorisés pour fins de regroupement dans les littéraux.

D'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 sur l'entier dans la plupart des cas) - il suffit de passer int la chaîne des zéros et des uns et la base que vous convertissez (2 ):

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

Vous pouvez éventuellement avoir le 0bou 0Bpréfixe:

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

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

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

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

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

>>> bin(21)
'0b10101'

Et vous pouvez combiner binet intde revenir en arrière:

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

Vous pouvez utiliser ainsi une spécification de format, si vous voulez 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'
Créé 14/05/2016 à 11:58
source utilisateur

voix
1

0 dans le début précise ici que la base est 8 (non 10), ce qui est assez facile à voir:

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

Si vous ne commencez pas avec un 0, puis python assume le nombre est base 10.

>>> int('10101', 0)
10101
Créé 21/06/2016 à 22:48
source utilisateur

voix
-1

Je suis assez sûr que ce soit l'une des choses due au changement de Python 3.0 avec peut-être bin () pour aller avec hex () et oct ().

EDIT: La réponse de lbrandy est correcte dans tous les cas.

Créé 04/08/2008 à 19:27
source utilisateur

voix
-1

Pour autant que je peux dire Python, à travers 2.5, prend en charge uniquement littéraux hexadécimaux et octaux. J'ai trouvé des discussions sur l'ajout de binaires à des versions futures, mais rien de définitif.

Créé 04/08/2008 à 19:26
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more