2013-04-04 22 views
6

Pracuję nad operatorem BitWise AND w javascript.Bitwise & in javascript nie zwraca oczekiwanego rezultatu

Mam dwa 32-bitowe nunber

4294901760 (11111111 11111111 00000000 00000000) and 

4294967040 (11111111 11111111 11111111 00000000) 

kiedy i im bitowe 4294901760 & 4294967040 mam -65536 wskutek chociaż wynik powinien być 4294901760.

Czy ktokolwiek może mnie poprowadzić czy czegoś brakuje? Lub jaki jest właściwy sposób to zrobić. Dzięki

+0

możesz podzielić się z nami swoją kodu JavaScript to działa "&"? – Jace

+2

console.log (4294901760 i 4294967040); to jest kompletny kod :) – user2243651

Odpowiedz

1

Argumenty operacji bitowe w JavaScript są converted to signed 32 bit integers. Unsigned 4294901760 ma taką samą reprezentację binarną, co podpis -65536. Można użyć >>> 0 do konwersji wyniku & do niepodpisany, np:

(4294901760 & 4294967040) >>> 0 
+0

dzięki alot @pfyod – user2243651

0

Sprawdź ten zwyczaj wdrożenie i eksploatacja bitowe:

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