Hanno Fietz Hanno Fietz - 9 months ago 54
Java Question

How do I compare two longs as unsigned in Java?

I'm storing bit patterns of unsigned 64-bit numbers in a

variable and want to calculate the distance between two of them on the unsigned range. Because Java interprets
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?

Answer Source

If you're dealing with addition and subtraction, it doesn't matter whether you're using signed or unsigned types, as long as the arguments are both signed or both unsigned. If you need to compare a and b, compare a-b to 0.