[Tutor] Hex to Str - still an open issue

Ismael Garrido ismaelgf at adinet.com.uy
Sun Feb 6 04:55:00 CET 2005


Liam Clarke wrote:

>Just looking at this - 
>i = 456
>s = ''
>while i:
>    s = str(i % 2) + s
>    i/=2
>
>This works, far simpler than mine, which is always infuriating, but my
>question is, how exactly?
>
>if I have the number 15, when it divides by 2, it will become 7. Yet
>no error is introduced into the binary. Argggg. Driving me nuts trying
>to figure out how. I thought maybe a larger odd number would do it,
>but no.
>
>Can anyone shed some more light on this?
>  
>
Let's step over it :
i = 15 # = 1111b
s = str(i % 2) + s # 15 % 2 = 1  so now  s = "1"
i = i / 2 # i = 7  where's the 1 missing? s has got it

s = 7 % 2 = 1 so now s = "11"
i = 7/2 = 3 ... and so on...

Remember when you do the base-conversion by hand:
(ASCII-ese graphics, use fixed font)
15 | 2
   ----
 1   7 | 2
       ----
     1   3  and so on...
You're basically doing the same thing


Perhaps that code could be improved by not using strings:
### Warning, untested code! ###
i = 15
power = 0
f = 0

while i > 0:
    f = f+ (i%2)**power
    i /= 2
    power += 1

I don't know if that's faster, but I see it as a more "mathematic" way 
to do it.

Bye
Ismael


More information about the Tutor mailing list