1. 程式人生 > >java中有符號數與無符號數互相轉換

java中有符號數與無符號數互相轉換

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;
    }