[...] given that javascript int precision is accurate to 15 numbers
Not numbers, but 32 bits.
The value of 9.999.999.999 is higher than the full 32-bit range, that is 4,294,967,296 (or 2 ^ 32), so what happens is that you "convert" (clamp) the number to 32 bits, which will happen with any bitwise quotes:
console.log(9999999999>>0);
console.log(9999999999&0xffffffff);
console.log(9999999999<<0);
console.log(9999999999|9999999999);
Run codeHide resultSo what happens is that 1) the number is clamped to the 32-bit range, i.e. 1,410,065,407 in this case:
Full range would require 34-bits:
1001010100000010111110001111111111 -> 9,999,999,999
Actual result, max 32-bits:
--01010100000010111110001111111111 -> 1,410,065,407
then 2) OR'ed , , .
999,999,999 32- , .