按位&在javascript中没有返回预期的结果

时间:2013-04-04 07:26:49

标签: javascript bitwise-and

我在javascript中使用BitWise AND运算符。

我有两个32位的nunber

4294901760 (11111111 11111111 00000000 00000000) and

4294967040 (11111111 11111111 11111111 00000000)

当我和他们按位4294901760 & 4294967040时,我得到了-65536,但结果应为4294901760

任何人都可以指导我,我错过了什么吗?或者做到这一点的正确方法是什么。 感谢

3 个答案:

答案 0 :(得分:8)

console.log((4294901760 & 4294967040) >>> 0);

附加>>> 0,让它将您的操作解释为无符号。

<强>小提琴:
http://jsfiddle.net/JamZw/

更多信息:
Bitwise operations on 32-bit unsigned ints?

答案 1 :(得分:1)

javascript中按位操作的操作数为converted to signed 32 bit integers。无符号4294901760具有与签名-65536相同的二进制表示。 您可以使用>>> 0&的结果转换为无符号,例如:

(4294901760 & 4294967040) >>> 0

答案 2 :(得分:0)

检查AND按位操作的自定义实现:

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