Hints for writing bit-twiddling code in Python

Dan Stromberg drsalists at gmail.com
Wed Dec 7 01:08:34 EST 2011


On 12/6/11, Steven D'Aprano <steve+comp.lang.python at pearwood.info> wrote:
> I have some bit-twiddling code written in Java which I am trying to port
> to Python.:
>
> long newSeed = (seed & 0xFFFFFFFFL) * 0x41A7L;
> while (newSeed >= 0x80000000L) {
>     newSeed = (newSeed & 0x7FFFFFFFL) + (newSeed >>> 31L);
>     }
> seed = (newSeed == 0x7FFFFFFFL) ? 0 : (int)newSeed;

I suspect the problem lies somewhere other than the java and python
code you posted.

I'm having a bit of a time finding an input value of seed that gives
two different results, despite throwing some hard-feeling test cases
and lots of random values, using both a 32 bit and a 64 bit JVM.

I believe java likes to treat strings like Python 3, but if you use
"export LC_ALL=en_US.ISO-8859-1", then it'll behave a little more like
Python 2 in that strings have an 8 bit encoding (or at least act like
it) that's round-tripable.

If worse comes to worse, you could probably write some test harness
code for each of the java and python, and then feed them the same
inputs - to see which pieces differ and which don't.



More information about the Python-list mailing list