很明显,java没有'unsigned long'类型,而我们可以使用long来存储无符号数据。那么如何将其转换为字符串或以“无符号”方式打印?
问问题
5817 次
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 回答