java中有符号数与无符号数互相转换

java中有符号数与无符号数互相转换

文章目录

  • java中long类型转换成无符号数
  • 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;
    }

你可能感兴趣的:(javaSE)