Javascript中使用类型化数组的逐位加法、异或和左旋转
我正在尝试使用Javascript实现一个规范作为学习练习 对于附加内容,它提到了测试向量: 0xc0a8787e+0x9fd1161d=0x60798e9b 我考虑过使用此任务,并提出了以下代码: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
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]));