我正在将这个Big Integer库用于Javascript:http://www.leemon.com/crypto/BigInt.js,我需要能够将两个bigInt放在一起,遗憾的是库不包含这样的功能。图书馆相对简单,所以我认为这不是一项艰巨的任务,只是令人困惑。
我一直试图一起破解,但没有太多运气,如果有人可以伸出援助之手,我将非常感激。这是我尝试过的(可能是错的)。但我猜测结构将与其中的一些其他功能非常相似。
function xor(x, y)
{
var c, k, i;
var result = new Array(0); // big int for result
k=x.length>y.length ? x.length : y.length; // array length of the larger num
// Make sure result is the correct array size? maybe:
result = expand(result, k); // ?
for (c=0, i=0; i < k; i++)
{
// Do some xor here
}
// return the bigint xor result
return result;
}
令我困惑的是我真的不明白它如何在bigInt的数组块中存储数字。我认为这不是简单的bigintC [i] = bigintA [i] ^ bigintB [i]的情况,那么大多数其他函数在最后都有一些我不理解的屏蔽操作。我真的很感激任何帮助这项工作。
由于
答案 0 :(得分:0)
看起来js正在将int存储到每个数组元素的bpe位中。
看看这个:
//convert the integer t into a bigInt with at least the given number of bits.
//the returned array stores the bigInt in bpe-bit chunks, little endian (buff[0] is least significant word)
//Pad the array with leading zeros so that it has at least minSize elements.
//There will always be at least one leading 0 element.
function int2bigInt(t,bits,minSize) {
var i,k;
k=Math.ceil(bits/bpe)+1;
k=minSize>k ? minSize : k;
buff=new Array(k);
copyInt_(buff,t);
return buff;
}
以及文件顶部的注释:
// This code defines a bigInt library for arbitrary-precision integers.
// A bigInt is an array of integers storing the value in chunks of bpe bits,
// little endian (buff[0] is the least significant word).
所以走数组,每个数组元素的bpe位按位XOR应该有效。
如果bigints是负数,你可能需要注意,因为代表有2s补码。
答案 1 :(得分:-1)
Javascript内置了对按位运算符的支持 https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Bitwise_Operators
alert(14 ^ 9) // 7
<强>更新强>
应该更好地阅读问题,OP显然已经意识到了运营商