2 votes

Vérifier la représentation de la base des nombres entiers

Je définis un nombre entier comme suit :

x = 0xFF

Mais lorsque je demande sa valeur à l'interprète, j'obtiens :

255

Existe-t-il un moyen de forcer l'interprète à me renvoyer la valeur de la même manière que je l'ai définie ? Existe-t-il un moyen de vérifier la représentation de base d'un entier ?

4voto

John Kugelman Points 108754

Non. Ni Python ni aucun autre langage que je connaisse ne mémorise la base dans laquelle vous écrivez un entier littéral. 0xFF est indiscernable de 255 . Elles sont toutes deux converties dans la même représentation sous-jacente : binaire.

  • Si vous voulez vous souvenir d'une base, vous avez besoin d'un type différent de int . Peut-être stocker les entiers sous forme de chaîne de caractères "0xFF" ou sous la forme d'un tuple (0xFF, 16) . int ne contient tout simplement pas les informations souhaitées.

  • De manière plus réaliste, c'est à vous qu'il incombe de formater les résultats comme vous le souhaitez. Si vous introduisez un nombre hexadécimal dans une fonction et que vous obtenez un résultat en retour, c'est à vous de formater le résultat en hexadécimal également. Je ne m'attends pas à ce que ce code "fasse ce que vous voulez" :

    print foobar(10)
    print foobar(0xFF)

    Rendez vos intentions explicites. Si le formatage par défaut (décimal) ne vous convient pas, remplacez-le :

    print '%04d' % (foobar(10)))
    print '%04x' % (foobar(0xff)))

2voto

user225312 Points 22699

0x est un hexagone.

Pour forcer l'interprète à afficher la valeur originale :

hex(x)

>>> x = 0xFFF
>>> x
4095
>>> hex(x)
'0xfff'
>>>

1voto

Bob Points 2207

0xFF (hex) et 255 (décimal) sont le même nombre. Il en va de même pour 0377 (octal) et 11111111 (binaire). Quelle que soit la base dans laquelle vous le définissez, il s'agit de la même valeur sous-jacente, et la manière dont vous l'avez déclaré n'a plus d'importance.

1voto

log0 Points 6367

Dans tous les cas, la valeur sera représentée en binaire. Python ne se souvient pas de la façon dont vous avez écrit la valeur lorsque vous avez décidé de l'assigner à une variable.
Si vous souhaitez stocker cette information, créez une classe spécifique qui stockera cette information pour vous et affichera la valeur correctement. Notez que lorsque vous attribuerez la valeur, vous devrez de toute façon spécifier explicitement la base.

0voto

Conor Points 73

Le nombre entier est représenté en utilisant la représentation standard des nombres entiers (base 2). Lorsque vous définissez l'entier, vous lui attribuez une valeur qui est implicitement convertie à partir de votre représentation, de sorte que la base d'origine est perdue. Si vous le souhaitez, vous pouvez définir votre propre classe qui stocke ces informations ainsi que la valeur de l'entier sous-jacent

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