将long转换为两个int,反之亦然

use*_*081 20 java int long-integer

如何将两个32位整数(int)转换为一个64位long,反之亦然?

Fuw*_*jax 40

long c = (long)a << 32 | b & 0xFFFFFFFFL;
int aBack = (int)(c >> 32);
int bBack = (int)c;
Run Code Online (Sandbox Code Playgroud)

在Java中,您不需要太多括号,也不需要反向计算任何掩码.


Oli*_*rth 2

整型到长型:

long c = ((long)a << 32) | ((long)b & 0xFFFFFFFFL);
Run Code Online (Sandbox Code Playgroud)

我将把它作为练习留给读者进行逆向计算。但提示是;使用更多的位移位和位掩码

(根据 T. Murdock 的评论进行编辑)

  • 这个答案是微妙错误的:由于掩码中包含(截至此评论)七个 F,而不是八个,因此“b = 0x1FFFFFFF”将会失败。这意味着它不仅对于 b 的所有负值都失败(因为没有掩码的答案会失败),而且对于 b 的大正值也失败。 (4认同)