当你听到IEEE浮点数的时候,你绝对不会按位一位一位的处理它们。
下次,当你的Java项目需要从一系列的二进位中创建浮点数或者从浮点数中创建一个二进制数位的序列的时候,Float类可以帮助你工作。
IEEE754单精度浮点数的格式定义了存储浮点数的方法。最高位是符号位(sign),符号位后的八位是阶码(exponent),最后23位是尾数(mantissa)。看下面的解释:
SEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMMwhere:
S = sign bit
E = exponent
M = mantissa
你可以从IEEE的网站上买到完整的IEEE浮点数的完整解释。(如果你在线搜索IEEE754,你可以找到免费资料)
下面的程序使用了两个Float方法将一个Float转换为bits, bits最后返回为float。
要将一个float转换为一系列的bits,利用Float.floatToInBits(float f)。这种方法返回一个32位的整数,这些整数扮演IEEE754需要的浮点数的bits。你可以把它作为一个变量。
如果要向反方向移动,你可以利用Float.intBitsToFloat(int bits)方法。这种方法将整数通过以后打开bits放入IEEE的浮点数里。
下面就是这个样本程序:
public class BitsTip {
public static void main(String args[]) {
float f = Float.parseFloat(args[0]);
int bits = Float.floatToIntBits(f);
System.out.println("bits:
" + bits);
System.out.println("back
to float: " + Float.intBitsToFloat(bits));
}
}
如果你需要手动进行编码的转换,你将非常感激这两个简单的方法帮助你节省了时间。如果你需要处理64位的数字,你需要Double wrapper类。对于双精度来说,使用这种类的方法和单精度一样。
确保阅读所有你获得的javadoc并且对这些方法能够完成什么功能有一个全面的了解。
David Petersheim是Genscape公司的应用开发主管。他设计并开发了服务方应用(server-side applications)以便可以获得和处理实时能量数据