【发布时间】:2012-05-21 13:27:29
【问题描述】:
如何将两个 32 位整数 (int) 转换为一个 64 位 long,反之亦然?
【问题讨论】:
-
你想以什么方式转换它们?一种可能性:(a
-
签名还是未签名?如果无符号,那么负值意味着什么?
标签: java int long-integer
如何将两个 32 位整数 (int) 转换为一个 64 位 long,反之亦然?
【问题讨论】:
标签: java int long-integer
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++) {...
(stop - start)*2.0/reps*Long.MAX_VALUE) 是 1.207154932183553E22 而 Long.MaxValue 是 9223372036854775807 所以当转换为 (long) 发生时,每个人都以 9223372036854775807 结束。因为那是 1/1308 年的真实值,时间实际上应该是 382, (尽管实际答案是正确的,但仍然 +1)
整数到长整数:
long c = ((long)a << 32) | ((long)b & 0xFFFFFFFFL);
我将把它作为练习留给读者执行反向计算。但提示是;使用更多位移和bit-masks。
(根据 T. Murdock 的评论编辑)
【讨论】:
b = 0x1FFFFFFF 会失败,因为掩码中包含(截至本评论)七个 F,而不是八个。这意味着它不仅对于 b 的所有负值都失败(因为没有掩码的答案会失败),而且对于 b 的大正值也是如此。