2012-05-21 6 views
13

2つの32ビット整数(int)を1つの64ビットlongに変換するにはどうすればよいですか? long型へlongを2 intに変換し、逆も同様です

+0

どのように変換したいですか? 1つの可能性:(a << Integer.SIZE)| b –

+0

署名付きまたは署名なし?符号なしの場合、負の値はどういう意味ですか? –

+0

[2つのintを長時間格納しているJava]の複製があります(https://stackoverflow.com/questions/12772939/java-storing-two-ints-in-a-long) – Vadzim

答えて

1

int型:

long c = ((long)a << 32) | ((long)b & 0xFFFFFFFL); 

私は逆の計算を実行するために読者の練習としてそれを残しておきます。しかし、ヒントは、より多くのビットシフトとbit-masksを使用してください。

+0

'b <0 '? –

+0

@AleksG:いいキャッチ! –

+0

私は、bが状況によってはすでに有効であると思われるかもしれないと思います。 – Tharwen

32
long c = (long)a << 32 | b & 0xFFFFFFFFL; 
int aBack = (int)(c >> 32); 
int bBack = (int)c; 

Javaでは、あまりにも多くのかっこや逆の計算でのマスクは必要ありません。

+1

借用人: 'for(long i = Long.MIN_VALUE; i <= Long.MAX_VALUE; i ++){...' –

+0

292年ははるかに少ないです。私のコンピュータは、誰もがelsesように、292年も請求しています。 Long.MaxValueは9223372036854775807ですが、 '(long) 'へのキャストが起こると誰もが9223372036854775807になります。それは1/1308thです。実際の価値は382,000年になるはずです。 (まだ実際の答えが正しいので、まだ+1です) –

+0

母、非常に良いリチャード。私は手動でmillis-to-something-else変換を行うことは絶対にしたくありませんが、何百(または何十万)年ものミリ秒の分解能を得ることはほとんどありません。私はもはや先生ではないので、私はちょうど全体の "運動"ビットを編集します。答えはそれほど長くする必要はありません。 – Fuwjax

関連する問題