繁体   English   中英

如何将java中的long值设置为2^64-1?

[英]how to set a long value in java to 2^64-1?

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

但是将long2^63+12^64-1的最佳方法是什么?

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负数当然是正确的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM