JavaScript中的java.lang.Double.longBitsToDouble函数

JavaScript中的java.lang.Double.longBitsToDouble函数,java,javascript,Java,Javascript,我在JavasScipt中有一个BinaryStream类,它从通过XMLHHttpRequest下载的数组中读取字节,并具有函数next(),该函数返回一个无符号字节(技术上是一个整数)。我需要从流中读取一个double,它与使用该方法的Java基本相同。我不知道longBitsToDouble方法是如何工作的 以下是我的代码: var bits = stream.nextLong(); if (bits == 0x7ff0000000000000) this.variables =

我在JavasScipt中有一个BinaryStream类,它从通过XMLHHttpRequest下载的数组中读取字节,并具有函数next(),该函数返回一个无符号字节(技术上是一个整数)。我需要从流中读取一个double,它与使用该方法的Java基本相同。我不知道longBitsToDouble方法是如何工作的

以下是我的代码:

var bits = stream.nextLong();
if (bits == 0x7ff0000000000000)
    this.variables = [Infinity];
else if (bits == 0xfff0000000000000)
    this.variables = [-Infinity];
else if (bits >= 0x7ff0000000000001 && bits <= 0x7fffffffffffffff || bits >= 0xfff0000000000001 && bits <= 0xfff0000000000001)
this.variables = [NaN];
else
{
    var s = ((bits >> 63) == 0) ? 1 : -1;
    var e = ((bits >> 52) & 0x7ff);
    this.variables = [(e == 0) ? (bits & 0xfffffffffffff) << 1 : (bits & 0xfffffffffffff) | 0x10000000000000];
    // This must be incorrect because it returns a number many times higher than it should
}
console.log(this.variables[0]);
var bits=stream.nextLong();
如果(位==0x7FF0000000)
this.variables=[无穷大];
else if(位==0xfff0000000000000)
this.variables=[-无穷大];
否则,如果(位>=0x7ff0000000000001&&bits=0xfff0000000000001&&bits>63)==0)?1 : -1;
变量e=((位>>52)和0x7ff);
this.variables=[(e==0)?(bits&0xfffffffffffffff)有一个
floatToLongBits
的实现。首先,你应该能够调整尾数掩码和大小以及指数掩码和大小

乔尔·韦伯(GWT的):

Quake代码只有在WebKit(Nitro&V8)上测试过,所以我会 使用前请仔细检查。
float
/
doubleToLongBits()
在Javascript中是 非常非常糟糕的工作,效率非常低。与 小心


我发现了一个JavaScript库,它可以从字节数组中编码和解码许多不同类型的数字。

JavaScript按位运算符不能对大于
0x7ffffff
(2147483647)的数字进行操作.
0x8000000>>0
给出了
-2147483647
,而不是
2147483648
。啊,这是一个大问题。你没有解决方法吗?谢谢,这可能就是我所需要的。那么,你需要一个方法来执行按位操作吗?你能用你的代码示例发表评论吗,例如输入+预期输出?我需要一个函数,该函数可以将8个字节的数组转换为IEEE 754浮点值,例如将[64、103、224、0、0、0、0]转换为191,这与Java中的DataStream.readDouble()方法相同。