版权声明: https://blog.csdn.net/maoyuanming0806/article/details/82994986
java中有符号数与无符号数互相转换
java中long类型转换成无符号数
由于JAVA中基本数据类型均为有符号数,而且最大数据类型long为8字节
当long为负数时,最高位为1,转为无符号数时会超出long的取值范围,转换规则如下:
/**long转成无符号数*/
public static final BigDecimal longParseUnsigned(long value) {
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));
}
其中:
- 0x7fffffffffffffffL等价于Long.MAX_VALUE
- 0x80000000L 等价于Long.MAX_VALUE+1
java中无符号数转换成有符号数
private static final long parseUnsignedLong(String str) {
BigDecimal data = new BigDecimal(str);
long l = data.subtract(new BigDecimal(Long.MAX_VALUE)).subtract(BigDecimal.valueOf(1)).longValue();
return l | Long.MIN_VALUE;
}