Hanno Fietz - 5 months ago 29

Java Question

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

`long`

`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;

What's the correct way to do this?

Answer

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.