0

緯度の値が double であり、ビット単位の AND 演算を実行した後、ビットを右シフトしたいと考えています。以下は私のコード行です:

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

ただし、double 値と int 値の間のビットごとの AND 演算はできません。正確な値が得られないため、緯度を int に変換できません。誰でもこれで私を案内できますか?

編集:私の要件は、基本的に次の vb.net コードを Java に変換することです。理由: 以下のコード行 (vb.net) は、Android アプリ用に「Basic4Android」で記述されたメソッドの一部です。まったく同じ方法を BlackBerry アプリに実装する予定です。したがって、サーバー側でデコードされる以下のようにまったく同じ値を生成する必要があります。

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)を使用して double をビット経由でlong に変換できます

この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 に答える