java 将long类型的数值转无符号数
2013-11-08 10:53
288 查看
由于JAVA中基本数据类型均为有符号数,而且最大数据类型long为8字节
假如long为负数时,最高位为1,转为无符号数时会超出long的取值范围,所以转换规则如下:
方法:
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));
}
方法类似于示例:
int value = -3;
long unsignedValue = value & Long.MAX_VALUE;
unsignedValue |= 0x80000000L;
其中0x7fffffffffffffffL等价于Long.MAX_VALUE
0x80000000L 等价于Long.MAX_VALUE+1
假如long为负数时,最高位为1,转为无符号数时会超出long的取值范围,所以转换规则如下:
方法:
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));
}
方法类似于示例:
int value = -3;
long unsignedValue = value & Long.MAX_VALUE;
unsignedValue |= 0x80000000L;
其中0x7fffffffffffffffL等价于Long.MAX_VALUE
0x80000000L 等价于Long.MAX_VALUE+1
相关文章推荐
- JAVA 各种数值类型最大值和最小值 Int, short, char, long, float,&nbs
- C的无符号数据类型int,short,byte 转为 Java对应的数据long,char,short
- JAVA 各种数值类型最大值和最小值 Int, short, char, long, float,&nbs
- JAVA 各种数值类型最大值和最小值 Int, short, char, long, float,&nbs
- JAVA 各种数值类型最大值和最小值 Int, short, char, long, float,&nbs
- java 基本数值类型:byte short int long float double char
- java Long类型转换为flex AS Number类型时出现数值错误
- Java 里使用 long 类型的数据一定要在数值后面加上 “L”
- C的无符号数据类型int,short,byte 转为 Java对应的数据long,char,short
- C的无符号数据类型int,short,byte 转为 Java对应的数据long,char,short
- 在代码层面上解决由于Java用有符号数值类型映射MySQL无符号数值类型而导致的数值溢出问题
- JAVA 各种数值类型最大值和最小值 Int, short, char, long, float,&nbs
- JAVA 中STRING ,DATE,LONG 和TIMESTAMP类型的转换
- java Byte和各数据类型(short,int,long,float,double)之间的转换
- Java基础小结(数值类型转换规则)
- java -UDP ---客户端向主机传输一个long类型字符
- java代码(生成long类型数字)
- Java中float、double、long类型变量赋值添加f、d、L尾缀问题
- Java 中的数据类型是有符号的,与无符号数据类型的区别
- (二)Java数据类型有符号的和无符号的区别