Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中实现uint32乘法,类似于C_Javascript - Fatal编程技术网

如何在javascript中实现uint32乘法,类似于C

如何在javascript中实现uint32乘法,类似于C,javascript,Javascript,如何在javascript中进行uint32乘法而不降低精度 我正在尝试用javascript实现C算法 uint32 key = (val * 134775813) + 1; 因此,所有较高的字节都将在结果中丢失 我尝试了浏览器控制台: > a1 = 591751271 591751271 > a2 = 134775813 134775813 > a4 = (a1 * a2) + 1; 79753758642808320 我用python做了同样的计算 Python 3.

如何在javascript中进行uint32乘法而不降低精度

我正在尝试用javascript实现C算法

uint32 key = (val * 134775813) + 1;
因此,所有较高的字节都将在结果中丢失

我尝试了浏览器控制台:

> a1 = 591751271
591751271
> a2 = 134775813
134775813
> a4 = (a1 * a2) + 1;
79753758642808320
我用python做了同样的计算

Python 3.7.9 (default, Aug 18 2020, 06:22:45) 
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a1=591751271
>>> a2=134775813
>>> a4 = (a1 * a2) + 1
>>> print(a4)
79753758642808324
看起来很相似,但我对那些较低的字节特别感兴趣。谁能给我指出正确的方向吗

我知道有内置的BigInt对象,但实际上你不能用它们进行任何操作。

多亏了。谁 把我引向功能

我想出了这一个班轮,它表现完美

constumul=(a,b)=>Math.imul(a,b)>>0;
MDN站点具有polyfill功能,只需稍作更改即可实现此功能

constumul=(a,b)=>{
常数aHi=(a>>>16)&0xffff;
常数aLo=a&0xffff;
常量bHi=(b>>>16)和0xffff;
常量bLo=b&0xffff;
//移位0将固定高位上的符号
返回值(aLo*bLo)+((aHi*bLo+aLo*bHi)>>0);
};

JS编号是IEEE754-2019浮点64。您应该看看谢谢,我在()列表中没有看到这个函数,但我在MDN页面中找到了它。很好,但要获得uint32,我可以使用一个线性常数uMul=(a,b)=>Math.imul(a,b)>>0;。最好不要使用它们。