Hints for writing bit-twiddling code in Python

Steven D'Aprano steve+comp.lang.python at pearwood.info
Tue Dec 6 23:03:16 EST 2011


I have some bit-twiddling code written in Java which I am trying to port 
to Python. I'm not getting the same results though, and I think the 
problem is due to differences between Java's signed byte/int/long types, 
and Python's unified long integer type. E.g. Java's >>> is not exactly 
the same as Python's >> operator, and a character coerced to a byte in 
Java is not the same as ord(char) in Python. (The Java byte is in the 
range -128...127, I think, while the ord in Python is in 0...255.)

Can anyone point me to some good resources to help me port the Java code 
to Python?

If it helps, the Java code includes bits like this:

long newSeed = (seed & 0xFFFFFFFFL) * 0x41A7L;
while (newSeed >= 0x80000000L) {
    newSeed = (newSeed & 0x7FFFFFFFL) + (newSeed >>> 31L);
    }
seed = (newSeed == 0x7FFFFFFFL) ? 0 : (int)newSeed;


which I've translated into:

newseed = (seed & 0xFFFFFFFF)*0x41A7
while (newseed >= 0x80000000):
    newseed = (newseed & 0x7FFFFFFF) + (newseed >> 31)
seed = 0 if newseed == 0x7FFFFFFF else newseed & 0xFFFFFFFF



-- 
Steven



More information about the Python-list mailing list