2013-04-04 11 views
6

私はJavaScriptでBitWise AND演算子を扱っています。Bitwise&JavaScriptで期待された結果を返さない

結果は4294901760する必要がありますが、私と彼らが4294901760 & 4294967040ビット単位で、私は結果として-65536を得たとき、私は2つの32ビットnunber

4294901760 (11111111 11111111 00000000 00000000) and 

4294967040 (11111111 11111111 11111111 00000000) 

を持っています。

私は何かを見逃してもらえますか?それを行う正しい方法は何ですか?

+0

あなたは私たちとあなたのjavascriptのコードを共有することができますそれは '&'操作をしますか? – Jace

+2

console.log(4294901760&4294967040);これは完全なコードです:) – user2243651

答えて

1

JavaScriptでビット演算のオペランドはconverted to signed 32 bit integersです。符号なし4294901760は符号付き-65536と同じバイナリ表現を持っています。 あなたは例えば、符号なしに&の結果を変換する>>> 0を使用することができます。

(4294901760 & 4294967040) >>> 0 
+0

ありがとうalot @pfyod – user2243651

0

こののカスタム実装とビット単位の操作を確認します。

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