java中有符號數與無符號數互相轉換
阿新 • • 發佈:2019-01-12
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; }