如何在 Java 中将长整型值设置为 2^64-1?



Java不支持无符号整数,但是如果您将long视为无符号整数,则可以很好地进行乘法。

但是,设置从2^63+12^64-1long的最佳方法是什么?

Long.MAX_VALUE0x7fffffffffffffffL;

我知道的唯一方法是

long maximumUnsigned = new BigInteger("18446744073709551615").longValue()(18446744073709551615 = 2^64-1在哪里)

这样做long maximumUnsigned = -1也可以,但我发现这有问题,可能会欺骗读者认为这是负面的。

似乎没有完美的解决方案。因为,正如你所说,Long.MAX_VALUE0x7fffffffffffffffL,我想我也会在第一个位置放一个F

long maxUnsignedLong = 0xFFFF_FFFF_FFFF_FFFFL;
System.out.println(Long.toUnsignedString(maxUnsignedLong));

输出:

18446744073709551615

优势:

  1. 对于知道long是 64 位并且熟悉十六进制数字的读者来说,它比18446744073709551615更容易阅读。
  2. 它不会给读者这样的印象,即这个数字应该被理解为负数(不管Jon Skeet当然是正确的,它是负数)。

最新更新