按位&;在javascript中,未返回预期结果
我正在研究javascript中的位AND运算符 我有两个32位数字按位&;在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,使其将您的操作解释为未签
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;
}