0

我有一个纬度值作为双精度值,我想对其执行按位与运算,然后右移位。以下是我的代码行:

pBuffer[1]=(latitude_decimal_degrees & 0xFF0000) >> 16;

但是,在 double 和 int 值之间进行按位与运算是不可能的。我无法将纬度转换为 int,因为这不会产生准确的值。有人可以指导我吗?

编辑:我的要求基本上是将以下 vb.net 代码翻译成 java。原因:下面的代码行 (vb.net) 是用“Basic4Android”为安卓应用编写的方法的一部分。完全相同的方法将在我的 BlackBerry App 中实现。因此,我需要生成与下面将在服务器端解码的完全相同的值:

Dim pBuffer(11) As Int
Dim longitude_decimal_degrees As Double
pBuffer(1)=Bit.ShiftRight(Bit.And(latitude_decimal_degrees, 0xFF0000),16)

这些代码行如何翻译成java?

4

2 回答 2

3

您可以使用Double.doubleToRawLongBits(latitude_decimal_degrees)在长空间中执行所有按位运算,然后通过 longBitsToDouble 将双精度转换为双精度

另请参阅此 SO 答案:https ://stackoverflow.com/a/4211117/504685

于 2012-12-18T07:32:46.660 回答
1

正如您自己和其他人所指出的那样,不可能对浮点数执行位移。现在,根据您更新的问题,您正在使用一个自定义库,该库实现了自己的位运算符版本。这些运算符的所有操作数都转换为 int

ShiftRight (N As Int, Shift As Int) As Int
And (N1 As Int, N2 As Int) As Int

为了匹配此逻辑,您的 Java 代码还应在执行必要的位操作之前将其 double 值转换为 int:

double latitude = 52.5233;
int transform = (((int)latitude) & 0xFF000000) >> 16;

请注意,这假定 Basic4Android 遵循与 Java 相同的从 int 到 double 的转换规则(数字向下舍入为整数)。

当您完成移植代码时,通过它传递一组值,并确保您的 Basic4Android 和 Java 代码中的最终结果是相同的。

于 2012-12-19T05:34:46.817 回答