6

我正在用 javascript 处理 BitWise AND 运算符。

我有两个 32 位数字

4294901760 (11111111 11111111 00000000 00000000) and

4294967040 (11111111 11111111 11111111 00000000)

当我和他们按位 计算时,4294901760 & 4294967040我得到了 -65536 虽然结果应该是4294901760.

任何人都可以指导我我错过了什么吗?或者什么是正确的方法。谢谢

4

3 回答 3

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

附加>>> 0让它将您的操作解释为未签名。

小提琴:http:
//jsfiddle.net/JamZw/

更多信息:
对 32 位无符号整数的按位运算?

于 2013-04-04T07:36:50.173 回答
1

javascript 中按位运算的操作数被转换为有符号的32 位整数。Unsigned4294901760具有与 signed 相同的二进制表示-65536。您可以使用>>> 0将结果转换&为无符号,例如:

(4294901760 & 4294967040) >>> 0
于 2013-04-04T07:39:17.903 回答
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

于 2014-03-13T08:56:13.023 回答