【发布时间】:2010-11-27 12:22:18
【问题描述】:
我将无符号 64 位数字的位模式存储在 long 变量中,并希望计算其中两个在无符号范围内的距离。因为 Java 将 long 解释为二进制补码有符号整数,所以我不能只使用 a - b,如下例所示:
// on the unsigned range, these numbers would be adjacent
long a = 0x7fffffffffffffffL;
long b = 0x8000000000000000L;
// but as two's complement (or any representation that
// stores the sign in the first bit), they aren't
assert b - a == 1;
这样做的正确方法是什么?
【问题讨论】:
-
正如下面几位海报所指出的,我的示例确实有效。我从应用程序中更复杂的代码中提取了它,之后没有对其进行测试,后来发现我在原始代码中有另一个错误,这让我相信二进制表示是问题所在。这意味着这个问题不再有意义。但是,这些答案对我很有帮助,所以我就让它保持原样。
-
我想我记得有一个答案以二进制形式显示我以后如何使用计算出的差异来通过
b = a + d检索 b,以及为什么为此目的,你怎么做并不重要解释位模式。但是那个答案要么消失了,要么我在其他地方看到了。尽管如此,它还是有帮助的。 ;-)
标签: java bit-manipulation math