我要存储一个双重的整数数组,并能够再次读取双,如:的Java存储双在整数[]
int[2] doubleToIntArr(double)
double intArrToDouble(int[2])
如何才能实现这一目标?
我要存储一个双重的整数数组,并能够再次读取双,如:的Java存储双在整数[]
int[2] doubleToIntArr(double)
double intArrToDouble(int[2])
如何才能实现这一目标?
这里有一种方法:
使用Double.doubleToLongBits(double)
打开double
成long
。
使用移位和掩码来提取long
的高位和低位部分,并将它们存储在int[]
(或Integer[]
)中。
(有实现这种其它方式,但如果你关心性能,这可能是最有效的方式做到这一点的纯Java)。
注意,这种转变在计算上并不有用。除了将它们变回double
之外,用int
这对值很难做任何有意义的计算。
谢谢,我应该想出了同样的事情。 – Robin
java.nio.ByteBuffer
类的方法允许您读取和写入字节数组的标准数据类型。
您应该可以使用它来编写您的Double
,然后读出两个ints
,例如,
ByteBuffer buf = ByteBuffer.allocate(8);
buf.putDouble(d);
int i1 = buf.getInt(0);
int i2 = buf.getInt(4);
double d = 100;
long l = Double.doubleToLongBits(d);
int i1 = (int)(l >> 32);
int i2 = (int)l;
double d2 = Double.longBitsToDouble(((long)i1 << 32) | (i2&0xFFFFFFFFL));
System.out.println(d2);
是的。你做了什么? – Tunaki
@Tunaki,显然我不知道该怎么做。这就是为什么我问... – Robin
有多种方式来存储一个'双'作为2个整数,这取决于你为什么想要这样做,首先 –