[Python-Dev] Negative long literals (was Re: Does Python need a
'>>>' operator?)
Tim Peters
tim.one@comcast.net
Mon, 10 Jun 2002 09:41:27 -0400
[Michael Gilfix]
> ...
> Well, in today's python, if I want to operate on a 64-bit block (without
> breaking it up into two ints), I could use a long to hold my value. Then
> let's say I perform some operation and I know the result is a 32-bit value
> and is signed. It's not easy to get it back into an int.
It it's a signed result that truly fits in a 32-bit signed int, and you know
you're running on a 32-bit box, simply do int(result). Nothing more than
that is necessary or helpful.
If you have a *positive* long that would fit in a 32-bit unsigned int (which
type Python doesn't have), and know you're running on a 32-bit box, and only
want the same bit pattern in an int, you can do
def toint32(long):
if long & 0x80000000L:
long -= 1L << 32
return int(long)
This also raises OverflowError if you're mistaken about it fitting in 32
bits.
> I suppose with unification, I could just do:
>
> if num & 0xA0000000:
> num = -num
With full unification, there is no distinct int type, so there's nothing at
all you need to do.