Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按位&;在javascript中,未返回预期结果_Javascript_Bitwise And - Fatal编程技术网

按位&;在javascript中,未返回预期结果

按位&;在javascript中,未返回预期结果,javascript,bitwise-and,Javascript,Bitwise And,我正在研究javascript中的位AND运算符 我有两个32位数字 4294901760 (11111111 11111111 00000000 00000000) and 4294967040 (11111111 11111111 11111111 00000000) 当我和它们按位4294901760&4294967040时,结果是-65536,尽管结果应该是4294901760 有人能给我指点路吗?我是不是错过了什么?或者正确的方法是什么。 谢谢 追加>>0,使其将您的操作解释为未签

我正在研究javascript中的位AND运算符

我有两个32位数字

4294901760 (11111111 11111111 00000000 00000000) and

4294967040 (11111111 11111111 11111111 00000000)
当我和它们按位
4294901760&4294967040时,结果是-65536,尽管结果应该是
4294901760

有人能给我指点路吗?我是不是错过了什么?或者正确的方法是什么。 谢谢

追加
>>0
,使其将您的操作解释为未签名

小提琴:

更多信息:

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

(4294901760 & 4294967040) >>> 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;
}
函数和(a,b){
a=a.toString(2).拆分(“”);
b=b.toString(2).拆分(“”);
变量长度=数学最大值(a.长度,b.长度);
函数padzero(数组、大小){

while(array.length能否与我们共享执行
操作的javascript代码?console.log(4294901760和4294967040);这是完整的代码:)
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;
}