2012-08-28 3 views
3

В этом примере я получаю положительное число, но мне нужно выражение в Python, которое дает тот же результат, что и в Javascript.Python left shift (sign issue)

Как этот отрицательный результат можно получить в Python?

Python 2,7

mv = 1732584193 << 5 

Результат:

мв = 55442694176

bin(mv) дает 0b1100111010001010010001100000001

Javascript

mv = 1732584193 << 5 

Результат:

мв = -391880672

mv.toString(2) дает -10111010110111001111111100000

+0

Нравится: http://stackoverflow.com/q/1375897/707111 – Ryan

+0

Спасибо, я уже прочитал и попытался перенести значения, непосредственно возвращенные из этих функций, с теми же результатами. – Martin0x777

+0

Не меняйте значения, возвращаемые этой функцией. Shift, * then * применить эту функцию. Вам также нужно будет замаскировать его с помощью '0xffffffff'. – Ryan

ответ

0

Вы можете использовать ctypes сделать это:

>>> import ctypes 
>>> mv = ctypes.c_int32(1732584193) 
>>> mv.value <<= 5 
>>> mv 
c_int(-391880672) 
>>> bin(mv.value) 
'-0b10111010110111001111111100000' 
+0

Спасибо jterrace. Трудно уже указывал на ответ, ваш подход лучше всего подходит для моего сценария. – Martin0x777