2013-04-04 91 views
6

我正在使用BitWise AND運算符在JavaScript中。按位&在JavaScript沒有返回預期的結果

我有兩個32位nunber

4294901760 (11111111 11111111 00000000 00000000) and 

4294967040 (11111111 11111111 11111111 00000000) 

當我和他們按位4294901760 & 4294967040我-65536結果雖然結果應該是4294901760

任何人都可以請指導我我錯過了什麼嗎?或者什麼是正確的做法。 感謝

+0

你能與我們的javascript代碼共享那'''操作? – Jace 2013-04-04 07:29:40

+2

console.log(4294901760&4294967040);這是完整的代碼:) – user2243651 2013-04-04 07:32:46

回答

1

操作數。無符號4294901760具有與簽署的-65536相同的二進制表示形式。 您可以使用>>> 0來轉換結果的&無符號,如:

(4294901760 & 4294967040) >>> 0 
+0

非常感謝@pfyod – user2243651 2013-04-04 08:47:36

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