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
