因爲JAVA中基本數據類型均爲有符號數,並且最大數據類型long爲8字節
假如long爲負數時,最高位爲1,轉爲無符號數時會超出long的取值範圍,因此轉換規則以下:大數據
方法:spa
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));
}ci
方法相似於示例:
int value = -3;
long unsignedValue = value & Long.MAX_VALUE;
unsignedValue |= 0x80000000L;io
其中0x7fffffffffffffffL等價於Long.MAX_VALUEclass
0x80000000L 等價於Long.MAX_VALUE+1數據類型