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