Bitvis & i JavaScript returnerar inte det förväntade resultatet


Jag arbetar med BitWise AND-operatorn i JavaScript.

Jag har två 32-bitarsnummer

4294901760 (11111111 11111111 00000000 00000000) and

4294967040 (11111111 11111111 11111111 00000000)

när jag och dem bitvis 4294901760 & 4294967040 fick jag -65536 som resultat även om resultatet borde vara 4294901760.

Kan någon vänligen guida mig, saknar jag något? Eller vad är rätt sätt att göra det på. Tack

Svar #1

console.log((4294901760 & 4294967040) >>> 0);

Lägg till >>> 0 för att få det att tolka din operation som osignerad.

Fiol:
http://jsfiddle.net/JamZw/

Mer info:
Bitvisa operationer på 32-bitars osignerade heltal?

Svar #2

Operanderna för bitvisa operationer i JavaScript konverteras till signerade 32-bitars heltal. Osignerade 4294901760 har samma binära representation som signerade -65536. Du kan använda >>> 0 för att konvertera resultatet av & till osignerat, t.ex.:

(4294901760 & 4294967040) >>> 0