I've got a really big number: 5799218898. And want to shift it right to 13 bits.
So, windows-calculator or python gives me:
5799218898 >> 13 | 100010100100001110011111100001 >> 13 70791 | 10001010010000111
As expected.
But Javascript:
5799218898 >> 13 | 100010100100001110011111100001 >> 13 183624 | 101100110101001000
I think it because of internal integer representation in javascript, but cannot find anything about that.
Jon Seigel12.5k88 gold badges6060 silver badges9393 bronze badges
asked Mar 3, 2010 at 18:13
AndrewAndrew8,4901212 gold badges5050 silver badges7979 bronze badges
2In ECMAScript (Javascript) bitwise operations are always in 32-bit. Therefore 5799218898 is chopped into 32-bit which becomes 1504251602. This integer >> 13 gives 183624.
In Python they are arbitrary-length integers. So there's no problem.
(And the numbers in Windows calculator are 64-bit, enough to fit 5799218898.)
(And the correct answer should be 707912.)
answered Mar 3, 2010 at 18:16
kennytmkennytm525k110110 gold badges1.1k1.1k silver badges1k1k bronze badges
1If you have a modern browser, you might want to use bigint for values greater than 32-bit signed. They were introduced in the 11-th Edition of ECMAScript Language back in 2020.
It is stated, you also find a browser compatibility table:
Bitwise operators are supported as well, except >>> (zero-fill right shift), as every BigInt value is signed. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt
You can do the following, tested for example in Chrome:
> Number(BigInt(5799218898) >> BigInt(13))
<- 707912
answered Jun 27, 2021 at 15:22
As Nicholas Zakas states:
Even though JavaScript numbers are technically stored in 64-bits, integer values are treated as if they’re 32 bits whenever bitwise operators are involved.
answered Mar 3, 2010 at 18:23
Marcel KorpelMarcel Korpel21.8k66 gold badges6262 silver badges8080 bronze badges
The number you have (5799218898) is beyond 32 bits. You didn't mention the JavaScript engine you're testing with, but it's very likely that it is 32-bit.
To test, trim the "5" at the beginning of your number so that you fall inside the 32-bit boundary. Then your shift should work fine.
answered Mar 3, 2010 at 18:17
Ateş GöralAteş Göral140k2727 gold badges141141 silver badges191191 bronze badges
2Start asking to get answers
Find the answer to your question by asking.
Ask questionExplore related questions
See similar questions with these tags.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4