由於JAVA中基本數據類型均為有符號數,而且最大數據類型long為8字節
假如long為負數時,最高位為1,轉為無符號數時會超出long的取值范圍,所以轉換規則如下:
方法:
public static final BigDecimal readUnsignedLong(long value) throws IOException {
if (value >= 0)
return new BigDecimal(value);
long lowValue = value & 0x7fffffffffffffffL;
return BigDecimal.valueOf(lowValue).add(BigDecimal.valueOf(Long.MAX_VALUE)).add(BigDecimal.valueOf(1));
}
方法類似於示例:
int value = -3;
long unsignedValue = value & Long.MAX_VALUE;
unsignedValue |= 0x80000000L;
其中0x7fffffffffffffffL等價於Long.MAX_VALUE
0x80000000L 等價於Long.MAX_VALUE+1