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 ?

0voto

bgporter Points 11119

Ce que tout le monde a dit ci-dessus est vrai - 0xff est la même chose que 255 en décimal. Si vous avez besoin de conserver la représentation de la chaîne de caractères pour une autre raison, vous pouvez faire quelque chose comme ceci :

class VerboseInt(object):
   def __init__(self, val):
      '''
         pass in a string containing an integer value -- we'll detect whether
         it's hex (0x), binary (0x), octal (0), or decimal and be able to
         display it that way later...
      '''
      self.base = 10
      if val.startswith('0x'):
         self.base = 16
      elif val.startswith('0b'):
         self.base = 2
      elif val.startswith('0'):
         self.base = 8
      self.value = int(val, self.base)         

   def __str__(self):
      ''' convert our value into a string that's in the same base
      representation that we were initialized with.
      '''
      formats = { 10 : ("", "{0}"), 
            2: ("0b", "{0:b}"), 
            8: ("0", "{0:o}"), 
            16: ("0x", "{0:x}")
            }

      fmt = formats[self.base]
      return fmt[0] + fmt[1].format(self.value)

   def __repr__(self):
      return str(self)

   def __int__(self):
      ''' get our value as an integer'''
      return self.value

0voto

Russell Borogove Points 8423

Qu'attendez-vous de.. :

 x = 0x7F + 128
 print x

La base numérique ne fait pas partie de la représentation interne d'un entier par Python. Vous pourriez, si vous le souhaitiez, gérer une chaîne de caractères au lieu d'un entier, et convertir explicitement en entier lorsque vous en avez besoin.

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