我正在研究javascript中的按位与运算符。
我有两个32位数字
4294901760 (11111111 11111111 00000000 00000000) and
4294967040 (11111111 11111111 11111111 00000000)
当我对
4294901760 & 4294967040
进行位运算时,结果为 -65536,而实际上应该是 4294901760
。请问有没有人能指导我是否有错漏?或者正确的操作方法是什么?谢谢。我正在研究javascript中的按位与运算符。
我有两个32位数字
4294901760 (11111111 11111111 00000000 00000000) and
4294967040 (11111111 11111111 11111111 00000000)
4294901760 & 4294967040
进行位运算时,结果为 -65536,而实际上应该是 4294901760
。请问有没有人能指导我是否有错漏?或者正确的操作方法是什么?谢谢。console.log((4294901760 & 4294967040) >>> 0);
将>>> 0
追加到操作中,以使其解释为无符号操作。
Fiddle:
http://jsfiddle.net/JamZw/
更多信息:
32位无符号整数的按位运算?
4294901760
与有符号的-65536
具有相同的二进制表示形式。您可以使用>>> 0
将&
的结果转换为无符号数,例如:(4294901760 & 4294967040) >>> 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}}
&
操作吗? - Jace