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