Operaciones bitwise en Python

Estoy buscando recomendaciones sobre cómo hacer matemáticas bitwise en Python.

El principal problema que tengo es que los operadores bitwise de python tienen una precisión infinita, lo que significa que -1 es realmente “111 ……. 111”. Eso no es lo que quiero. Quiero emular hardware real que tendrá cierta precisión fija, digamos 32 bits.

Aquí hay algunas trampas:

1) -n debe devolver un número de complemento de 32 bits 2 (esto se logra fácilmente tomando los 32 bits más bajos de la precisión infinita -n)

2) n >> 3, debe ser un cambio aritmético de un número de 32 bits, lo que significa que si el bit 31 es ‘1’, los bits 31:28 deben ser ‘1’ después del cambio en 3.

Siempre puede agregar una máscara & ((1<<32) - 1) para limitar el número a 32 bits antes de realizar cualquier operación, por ejemplo

 class Int32(int): def __neg__(self): return Int32(int.__neg__(self) & ((1 << 32) - 1)) def __rshift__(self, other): if self & (-1 << 31): retval = int.__rshift__(int.__sub__(self, 1<<32), other) return Int32(retval & ((1 << 32) - 1)) else: return Int32(int.__rshift__(self, other)) ... >>> -Int32(5) 4294967291 >>> (-Int32(5)) >> 1 4294967293 

Podrías usar numpy, tiene tipos int32 integrados y mucho más.