如何将两个32位整数(int
)转换为一个64位的long
,反之亦然?
如何将两个32位整数(int
)转换为一个64位的long
,反之亦然?
long c = (long)a << 32 | b & 0xFFFFFFFFL;
int aBack = (int)(c >> 32);
int bBack = (int)c;
在Java中,你不需要那么多括号,也不需要对反向计算进行任何掩码处理。
for (long i = Long.MIN_VALUE; i <= Long.MAX_VALUE; i++) {...
- Hot Licks(stop - start)*2.0/reps*Long.MAX_VALUE)
为1.207154932183553E22,而Long.MaxValue为9223372036854775807,因此当转换为(long)
时,所有人最终都得到9223372036854775807。由于这只是真实值的1/1308,因此实际上需要382,000年的时间。(虽然答案是正确的,但仍需加1) - Richard Tingle整数转换为长整型:
long c = ((long)a << 32) | ((long)b & 0xFFFFFFFFL);
我将把它留给读者作为一个练习来执行反向计算。但提示是:使用更多的位移和位掩码。
(根据T. Murdock的评论进行编辑)
b = 0x1FFFFFFF
,它将失败,因为掩码中包含(截至本评论时)七个 F,而不是八个。这意味着它不仅对于所有负值的 b 失败(就像没有掩码的答案一样会失败),而且对于大的正值的 b 也会失败。 - Theodore Murdock