7

I have converted JavaScript code which uses bit-wise operators in that code to Python code, but there is one problem when i do this in JavaScript and Python

412287 << 10

then I get this 422181888 same results in both languages. but when i do this in both

424970184 << 10

then i get different results in both of the languages 1377771520 in JavaScript and 435169468416 in Python

can anybody help me with this? any help would be appreciated.

VASIM SETA
  • 155
  • 1
  • 9

2 Answers2

6

If you want the JavaScript equivalent value then what you can do is :

import ctypes

print(ctypes.c_int(424970184 << 10 ^ 0).value)

Output:

1377771520
Taufiq Rahman
  • 5,600
  • 2
  • 36
  • 44
4

As stated in this SO answer, in javascript the bitwise operators and shift operators operate on 32-bit ints, and your second example overflows the 32 bit capacity, so the python equivalent would be:

(424970184 << 10) & 0x7FFFFFFF

(you get a "modulo"/"masked" value with the signed 32 bit integer mask, not the actual value)

In Python there's no limit in capacity for integers, so you get the actual value.

Community
  • 1
  • 1
Jean-François Fabre
  • 137,073
  • 23
  • 153
  • 219