I'm storing bit patterns of unsigned 64-bit numbers in a long
variable and want to calculate the distance between two of them on the unsigned range. Because Java interprets long
as a two's complement signed integer, I can't just do a - b
, as the following example shows:
// 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;
What's the correct way to do this?