Java Bitwise AND在double和int值之间的操作

时间:2012-12-18 07:26:09

标签: java vb.net bit-manipulation bit-shift

我有一个纬度值为double,我想对它执行按位AND运算,然后右移位。以下是我的代码:

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

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

编辑:我的要求基本上是将以下vb.net代码翻译成java。原因:下面的代码行(vb.net)是用于Android应用程序的“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?

2 个答案:

答案 0 :(得分:3)

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

另见这个答案:https://stackoverflow.com/a/4211117/504685

答案 1 :(得分: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遵循相同的转换规则,从int到double为Java(数字向下舍入为整数)。

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