Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.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:长-长数字的按位移位_Javascript - Fatal编程技术网

JavaScript:长-长数字的按位移位

JavaScript:长-长数字的按位移位,javascript,Javascript,我需要在JavaScript中将一个值按位移位64次。但是JavaScript在32之后开始取整 例如: for(var j = 0; j < 64; j++) { mask = mask << 1; console.log(mask); } for(var j=0;j

我需要在JavaScript中将一个值按位移位64次。但是JavaScript在
32之后开始取整

例如:

for(var j = 0; j < 64; j++)
{
    mask = mask << 1;
    console.log(mask);
}
for(var j=0;j<64;j++)
{

mask=maskJavaScript最初将其所有数字存储为64位,但一旦开始使用位运算符,解释器就会将数字转换为32位表示

在JS中,位运算符有点粗糙,所以令人烦恼的是,您可能需要做一些更聪明的事情,比如编写自己的64位函数。

"在Java中,按位运算符处理整数。JavaScript没有整数。它只有双精度浮点数。因此,按位运算符将其数字操作数转换为整数,进行运算,然后再转换回整数。在大多数语言中,这些运算符非常接近硬件,速度非常快。在JavaScrip中t、 它们离硬件很远,速度也很慢。JavaScript很少用于进行位操作。“-Douglas Crockford

关键是你没有任何理由使用位运算符,只需乘以或除以2^numbits即可

您的代码应该是:

for(var j = 0; j < 64; j++) {
 mask = mask * 2;
 console.log(mask);
}

你明白了。

Javascript在语言中没有整数作为可见类型;所有数字都是双精度(64位)浮点运算。这些运算最多只能容纳53位尾数,而64位整数不能容纳其中。因此,当它对整数进行内部转换并返回时,它只使用32位。注意:上面的代码可以工作,但最多只能容纳52位尾数,而不是64位!如果您设置mask=1,然后运行上面的代码,它将以184467440737095520结尾00-但2^64实际上是18446744073709551616。最后4位被屏蔽,因为52位不能容纳64位:-(
function lshift(num, bits) {
    return num * Math.pow(2,bits);
}