Comment imprimer un entier signé en tant que nombre hexadécimal en complément à deux avec python?
J'ai un entier négatif (4 octets) dont j'aimerais avoir le code hexadécimal de la forme de sa représentation en complément à deux.
>>> i = int("-312367")
>>> "{0}".format(i)
'-312367'
>>> "{0:x}".format(i)
'-4c42f'
Mais je voudrais voir "FF..."
Est-ce devoirs?
'forme hexadécimale de son complément à deux de la représentation' ? Comment est-ce que dans le moins de bits utiles?
Voir si cette réponse à une question connexe est de savoir ce que vous êtes à la recherche de: stackoverflow.com/questions/1604464/twos-complement-in-python/...
Konrad, peut-être qu'il se prépare un outil pour montrer à ses élèves comment il est fait. Ou il est curieux. Ou il a une API à suivre. Ou un copain pari de lui une caisse de bière que Perl peut faire mieux.
Oui, des chaînes de bits hex propriété semble renvoyer ce dont j'ai besoin. Merci.
'forme hexadécimale de son complément à deux de la représentation' ? Comment est-ce que dans le moins de bits utiles?
Voir si cette réponse à une question connexe est de savoir ce que vous êtes à la recherche de: stackoverflow.com/questions/1604464/twos-complement-in-python/...
Konrad, peut-être qu'il se prépare un outil pour montrer à ses élèves comment il est fait. Ou il est curieux. Ou il a une API à suivre. Ou un copain pari de lui une caisse de bière que Perl peut faire mieux.
Oui, des chaînes de bits hex propriété semble renvoyer ce dont j'ai besoin. Merci.
OriginalL'auteur none | 2010-07-13
Vous devez vous connecter pour publier un commentaire.
Ici un moyen (16 bits):
(Peut-être pas la façon la plus élégante, tout de même)
Cela ne fonctionne pas pour les nombres positifs. Si x=1, vous obtenez
0xffff
(-1 en 16 bits en complément à deux), au lieu de0x0001
.OP dit entier négatif...
L'exemple donné est un nombre entier négatif, mais la question était "Comment imprimer un entier signé... en complément à deux [représentation]". Il pourrait être source de confusion si cette réponse ne fonctionne que pour les entiers signés.
OriginalL'auteur adamk
pas de la somme de 123 et 2 de complément doit être de 0 (le carry/bit de dépassement de capacité est jeté) Il n'a pas d'importance si vous voulez traiter
0xff85
signé ou non signé.Je suis d'accord que le complément de 2 (l'opération sur des nombres binaires) de 0x007b est 0xff85, mais je crois que la question a été sur le complément de 2 signé le numéro de la représentation.
ah. Je crois comprendre ce que vous dites. C'est proably plus clair si je fais
x = -123
OriginalL'auteur John La Rooy
À l'aide de la bitstring module:
OriginalL'auteur Scott Griffiths
Simple
OriginalL'auteur siu
Pour traiter un entier comme une valeur binaire, vous and au niveau du bit et avec un masque, de la longueur en bits.
Par exemple, pour une valeur de 4 octets (32 bits) nous masque avec
0xffffffff
:OriginalL'auteur dcoles
La
struct
module effectue des conversions entre Python valeurs et C les structures représentées comme Python octets objets. Les paniers octets de l'objet permet d'accéder à des valeurs de chaque octet.Ceci peut être utilisé pour afficher le sous-jacent (C) représentation entière.
OriginalL'auteur gimel