Javascript中使用类型化数组的逐位加法、异或和左旋转

Javascript中使用类型化数组的逐位加法、异或和左旋转,javascript,bit-manipulation,bitwise-operators,typed-arrays,Javascript,Bit Manipulation,Bitwise Operators,Typed Arrays,我正在尝试使用Javascript实现一个规范作为学习练习 对于附加内容,它提到了测试向量: 0xc0a8787e+0x9fd1161d=0x60798e9b 我考虑过使用此任务,并提出了以下代码: var sumTestArray = new Int32Array(3); sumTestArray[0] = hexToDecimal('c0a8787e'); sumTestArray[1] = hexToDecimal('9fd1161d'); sumTestArray[2] = sumTes

我正在尝试使用Javascript实现一个规范作为学习练习

对于附加内容,它提到了测试向量:

0xc0a8787e+0x9fd1161d=0x60798e9b

我考虑过使用此任务,并提出了以下代码:

var sumTestArray = new Int32Array(3);
sumTestArray[0] = hexToDecimal('c0a8787e');
sumTestArray[1] = hexToDecimal('9fd1161d');
sumTestArray[2] = sumTestArray[0] + sumTestArray[1];

console.log(decimalToHex(sumTestArray[2]));

function hexToDecimal(input) {
    return parseInt(input, 16);
}
function decimalToHex(input) {
    return input.toString(16);
}
这将导致:
60798e9b
,这是正确的

Q1)根据规范,要添加的两个数字始终是32位。但这是Javascript中进行十六进制加法的正确方法吗?如果结果数字太大,是否会导致缓冲区溢出或输出错误?

另一个测试向量是两个十六进制数的XOR:

0xc0a8787e⊕ 0x9fd1161d=0x5f796e63

我的代码如下:

var xorTestArray = new Int32Array(3);
xorTestArray[0] = hexToDecimal('c0a8787e');
xorTestArray[1] = hexToDecimal('9fd1161d');
xorTestArray[2] = xorTestArray[0] ^ xorTestArray[1];

console.log(decimalToHex(xorTestArray[2]));
这将产生正确的
5f796e63

Q2)使用这些32位类型的数组进行计算时,是否存在错误计算或溢出的风险?

最后一个测试向量需要使用以下测试向量进行n位左旋转:


0xc0a8787e请注意,您会得到相同类型的结果,但是您可以直接在javascript中指定数字,而无需键入数组,例如
console.log((0xc0a87e+0x9fd1161d).toString(16))
…要进行轮换,您需要查看或查看免费轮换的结果:
(0xc0a8787e>>(32-5))。toString(16)
@LeeKowalkowski噢,这真是太棒了,修复了轮换,谢谢!不知道为什么会这样?你不明白哪一部分?
var rotateLeftTestArray = new Int32Array(2);
rotateLeftTestArray[0] = hexToDecimal('c0a8787e');
rotateLeftTestArray[1] = rotateLeftTestArray[0] << 5;

console.log(decimalToHex(rotateLeftTestArray[1]));