2013-04-04 10 views
6

Sto lavorando su operatore BitWise AND in javascript.Bitwise e in javascript non restituisce il risultato previsto

Ho due 32 bit nunber

4294901760 (11111111 11111111 00000000 00000000) and 

4294967040 (11111111 11111111 11111111 00000000) 

quando io e li bit 4294901760 & 4294967040 Ho -65.536 di conseguenza, anche se il risultato dovrebbe essere 4294901760.

Qualcuno può guidarmi? Mi manca qualcosa? O qual è il modo corretto per farlo. Grazie

+0

Puoi condividere con noi il tuo codice JavaScript che fa l'operazione '&'? – Jace

+2

console.log (4294901760 e 4294967040); questo è il codice completo :) – user2243651

risposta

1

Operandi delle operazioni bit per bit in javascript sono converted to signed 32 bit integers. Lo 4294901760 senza firma ha la stessa rappresentazione binaria firmata -65536. È possibile utilizzare >>> 0 per convertire risultato di & a non firmato, ad esempio:

(4294901760 & 4294967040) >>> 0 
+0

grazie mille @pfyod – user2243651

0

Scegli questa implementazione personalizzata di AND bit a bit:

function and(a, b){ 
    a = a.toString(2).split(''); 
    b = b.toString(2).split(''); 
    var length = Math.max(a.length, b.length); 
    function padZeroes(array, size){ 
     while(array.length <= size){ 
      array.unshift('0'); 
     } 
    } 
    padZeroes(a, length); 
    padZeroes(b, length); 
    var result = []; 
    $.each(a, function(i, v){ 
     result.push((a[i]==b[i] && a[i]!='0')?'1':'0'); 
    }); 
    var r = parseInt(result.join(''), '2'); 
    return r; 
} 

jsfiddle