2011-08-05 11 views

Odpowiedz

2

Wygląda na to, że przekraczasz maksymalną liczbę całkowitą JavaScript. Maksymalna obsługiwana wartość liczb całkowitych w języku JavaScript jest określona na 2^53.

UPDATE:

Moja początkowa reakcja tutaj nie była poprawna - problem nie jest maksymalna wartość całkowita obsługa JavaScript jest, to maksymalna wartość każdego argumentu obsługiwane przez op ampersand:

var biggest = 4294967291; // maximum 32 bit unsigned integer 
alert(biggest & 1); // alerts 1 
alert((biggest + 1) & 1); // alerts 0 

Szczęśliwa kodowania !

B

5

Bitwise operators w javascript przekonwertować argumenty do podpisanych 32-bitowych liczb całkowitych (od rodzimych IEEE 754 pływaków numery są przechowywane w).

+0

Może pomóc tutaj biblioteka podobna do [bigInt.js] (http://www.leemon.com/crypto/BigInt.html), chociaż osobiście jej nie wypróbowałem. – darioo

+1

Oznacza to, że nie można wykonywać operacji binarnych na liczbach większych niż (w przybliżeniu) 2 miliardy lub mniej niż (w przybliżeniu) -2 miliardy. Jeśli tak, zachowanie nie jest zdefiniowane. –

+0

Właściwie zachowanie jest dobrze zdefiniowane. Z "Javascript: The Defenitive Guide", strona 73: "Jeśli operatory bitowe są używane z operandami, które nie są liczbami całkowitymi lub są zbyt duże, aby zmieścić się w 32-bitowej reprezentacji całkowitej, po prostu zmuszają operand do 32-bitowych liczb całkowitych poprzez upuszczenie jakiejkolwiek ułamkowej części operandu lub jakichkolwiek bitów poza 32. " –

0

Operatory bitowe zajmują maksymalnie 32 bitów. Nie wiem, jak zdefiniowane jest zachowanie, gdy prosi się go o radzenie sobie z większymi wartościami.

Powiązane problemy