UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE
The reason why this works is, when you do bitwise & with 1 it allows the same digit to pass as it is and when you do bitwise & with 0 it blocks it and result is 0. Now, Long.MAX_Value in binary is
0111111111111111111111111111111111111111111111111111111111111111
this is 0 followed by 63 1s (total is 64 bits, it's long in java)
So when you bitwise & a number X with this above number then you will get the same number X except that the leftmost bit is now turned into a zero. Which means you've only changed the sign of that number and not the value.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…