unsigned integer?
Duncan Booth
duncan.booth at invalid.invalid
Sat Mar 10 12:50:32 EST 2007
"Jack" <nospam at invalid.com> wrote:
> This is a naive question:
>
> "%u" % -3
>
> I expect it to print 3. But it still print -3.
Internally it uses the C runtime to format the number, but if the number
you ask it to print unsigned is negative it uses %d instead of %u. I have
no idea if it is actually possibly to get a different output for %d versus
%u.
>
> Also, if I have an int, I can convert it to unsigned int in C:
> int i = -3;
> int ui = (unsigned int)i;
>
> Is there a way to do this in Python?
>
Depeneding on how exactly you want it converted:
i = -3
ui = abs(i)
print ui
ui = (i & 0xffff) # for 16 bit integers
print ui
ui = (i & 0xffffffff) # for 32 bit integers
print ui
ui = (i & 0xffffffffffffffff) # for 64 bit integers
print ui
ui = (i & 0xffffffffffffffffffffffffffffffff) # for 128 bit integers
print ui
which gives the following output:
3
65533
4294967293
18446744073709551613
340282366920938463463374607431768211453
There isn't a unique way to convert a Python integer to an unsigned value
which is why the %u format string cannot do anything other than print the
value. Personally I'd have expected the Python one to either print the
absolute value or throw an exception, but I guess making it an alias for %d
kind of makes sense as well.
More information about the Python-list
mailing list