Python Bitshift 32-битное ограничение

Возможный дубликат:
Проблема при вычислении контрольной суммы: литье int в подписанный int32

Это должен быть относительно простой ответ, я просто не знаю, как его искать … У меня есть несколько полузадачи, но ничего не подходит для того, что я пытаюсь сделать.

>>> 1171855803 << 7 149997542784L # I want -326312576 

Другими словами, обрабатывайте число как целое число и не позволяйте ему преобразовать в длинный. Как мне это сделать?

Я попробовал решение в этом вопросе :

 >>> x = 0xFFFFFFFF & (1171855803 << 7) >>> if x > 0x7FFFFFFF: print -(~(x - 1) & 0xFFFFFFFF) else: print x -326312576L # yay! 

Оно работает!

2 Solutions collect form web for “Python Bitshift 32-битное ограничение”

Не лучший ответ, но это работает …

 import numpy as np np.int32(1171855803) << 7 

Вы можете попробовать

 import ctypes a=ctypes.c_int32(1171855803) a.value<<=7 print a 

который дает: c_int (-326312576)

По-видимому, это позволяет манипулировать конкретными битками. Я не уверен в эффективности.

Python - лучший язык программирования в мире.