10

很明显,java没有'unsigned long'类型,而我们可以使用long来存储无符号数据。那么如何将其转换为字符串或以“无符号”方式打印?

4

4 回答 4

13

不幸的是,您需要使用 BigInteger,或者编写自己的例程。

这是一个有助于解决这些变通办法的无符号类

private static final BigInteger BI_2_64 = BigInteger.ONE.shiftLeft(64);

public static String asString(long l) {
    return l >= 0 ? String.valueOf(l) : toBigInteger(l).toString();
}

public static BigInteger toBigInteger(long l) {
    final BigInteger bi = BigInteger.valueOf(l);
    return l >= 0 ? bi : bi.add(BI_2_64);
}
于 2013-08-13T08:33:51.627 回答
10

正如关于 SO 的另一个问题中所提到的,有一种从 Java 8 开始的方法:

System.out.println(Long.toUnsignedString(Long.MAX_VALUE)); // 9223372036854775807
System.out.println(Long.toUnsignedString(Long.MIN_VALUE)); // 9223372036854775808
于 2015-08-13T14:05:11.857 回答
4

可以使用第三方库吗?番石榴就是UnsignedLongs.toString(long)这样做的。

于 2013-08-13T16:17:15.300 回答
0
long quot = (number >>> 1) / 5L; // get all digits except last one
long rem = number - quot * 10L; // get last digit with overflow trick
String out = Long.toString(quot) + rem;
于 2019-08-04T12:38:52.257 回答