JavaScript 中的位与运算符没有返回预期的结果。

6

我正在研究javascript中的按位与运算符。

我有两个32位数字

4294901760 (11111111 11111111 00000000 00000000) and

4294967040 (11111111 11111111 11111111 00000000)

当我对 4294901760 & 4294967040 进行位运算时,结果为 -65536,而实际上应该是 4294901760。请问有没有人能指导我是否有错漏?或者正确的操作方法是什么?谢谢。

你能分享一下你的JavaScript代码,实现&操作吗? - Jace
2
console.log(4294901760&4294967040); 这是完整的代码 :) - user2243651
3个回答

8

1
在javascript中,位运算的操作数被转换为带符号的32位整数。无符号的4294901760与有符号的-65536具有相同的二进制表示形式。您可以使用>>> 0&的结果转换为无符号数,例如:
(4294901760 & 4294967040) >>> 0

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;
}

{{link1:jsfiddle}}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接