6 votes

Convertir un entier en binaire puis faire un décalage de bit à gauche en python

J'ai un nombre entier en entrée d'un fichier texte que je dois convertir en binaire et faire un décalage de bit à gauche de 12 places.

Donc, si mon nombre est 6. C'est 110 en binaire. Ma sortie finale devrait être 110000000000000, bit décalé de 12 places.

J'ai essayé :

i = 6
h = int(bin(i)[2:])<<12

Mais, cela donne un résultat erroné. Le problème est le suivant bin(i) renvoie une chaîne de caractères, j'ai donc dû la convertir en int mais ensuite, l'utilisation de l'opérateur shift décale l'entier et non le binaire.

6voto

Johan Points 3217

Vous pouvez effectuer le décalage de bits avant de convertir en binaire, puisque le décalage de bits ne se soucie pas de la base de votre entier (le décalage de bits est par définition effectué en base 2).

i = 6 << 12
answer = bin(i)[2:]

Modifier : Conversion binaire alternative de @guidot

i = 6 << 12
answer = "{:b}".format(i)

Conversions supplémentaires

Juste pour le plaisir, voici d'autres façons de décaler un nombre :

i = 6 * (2**12) # This will convert into 6 * 2^12
answer = "{:b}".format(i)

Un décalage de bits double la valeur des chiffres, donc en multipliant le décalage de bits par la puissance deux, on obtient la même chose :

> print(6 << 12)
24576
> print(6 * 2**12)
24576

Il est généralement préférable d'utiliser le décalage de bits si vous savez que vous voulez seulement doubler la valeur.

Vous pouvez également le convertir en binaire, puis ajouter 13 zéros de queue, une façon originale d'obtenir la même fonctionnalité :

i = 6 # Notice: No operation here this time
answer = "{:b}".format(i) + ('0' * 12)

Il n'est peut-être pas recommandé d'utiliser la dernière méthode, mais elle illustre le fonctionnement du décalage de bits (à gauche).

-1voto

Invariance Points 183

J'ai trouvé un moyen de le faire.

h = int((bin(i<<12)[2 :]), 2)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X