当前位置:  开发笔记 > 编程语言 > 正文

JavaScript:长整数的按位移位

如何解决《JavaScript:长整数的按位移位》经验,为你挑选了2个好方法。

我需要在JavaScript中按位移位值64次.但JavaScript开始四舍五入32.

例如:

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

这将从打印0到打印,1073741824然后打印并开始打印0.



1> itsadok..:

"在Java中,按位运算符使用整数.JavaScript没有整数.它只有双精度浮点数.因此,按位运算符将它们的数字操作数转换为整数,执行它们的业务,然后将它们转换回来.在大多数语言中,这些运算符非常接近硬件并且速度非常快.在JavaScript中,它们离硬件非常远,而且非常慢.JavaScript很少用于进行位操作." - Douglas Crockford,Javascript:The Good Parts

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

你的代码应该是:

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

或者一般:

function lshift(num, bits) {
    return num * Math.pow(2,bits);
}

你明白了.



2> adam..:

JavaScript将其所有数字初始存储为64位,但只要您开始使用按位运算符,解释器就会将数字转换为32位表示.

按位运算符在JS中有点笨拙,所以很烦人,你可能需要做一些更聪明的事情,比如编写你自己的64位函数.


JS数字的尾数为53位,而不是64位.
Javascript没有整数作为语言中的可见类型; 所有数字都是双精度(64位)浮点数.那些只能容纳53位尾数,64位整数不适合.因此,当它进行内部转换为整数和返回时,它只使用32位.
推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有