私はJavaアプリケーションの1つのために軽量で高精度の算術ライブラリを構築しています。ときどきint
を得るには、long
に変換する必要があります。つまり、long
の32個の最下位ビットは、int
のビットと等しくなるはずです。intのビットをlongにする
残念ながら、キャストは正の数に対してのみ正しく動作します。さらに、long
と同じ算術式のint
を使用すると、あらかじめ暗黙的にlong
にキャストされます。これを行うにはよりエレガントな方法はあり
long l = (((long)(i >>> 8)) << 8) | (i & 0xff);
:
long l = (i & 0xffffffffL);
は現在、私はの線に沿って何かを使用しています:
i
が負の場合、これは動作しませんか?
EDIT:
int i = -1;
long l = (i | 0xffffffffL);
System.out.println(l);
これは-1
ではなく4294967295
をプリントアウト:
私は何かが欠けていてもよいです。 何がありますか?私は行方不明ですか?
EDIT 2:
メールで送信... |
の代わり&
。どのように****は少し******に行ったのですか?
EDIT 3:
は、私はそれを逃した正確にどのようになしアイデアを持っているが、これは完璧に動作します:この質問は完全に無関係になり
long l = (i & 0xffffffffL);
は...、私は推測します。
あなたの最初のコードはうまくいくはずです - 私はそれを試してみました。例えば 'i'が-1の場合、' l'は4294967295になります。 –
@JonSkeet:あなたはそれを試して、それは動作しますか?それは私のために働くようには見えない - 私の編集を参照してください... – thkala
あなたの編集は '&'の代わりに '|'を使用します... –