-
问题内容:如何在屏幕上显示二进制的float和double?
- 原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=5635478
- 所属论坛:J2SE / 基础类
审核组:JAVA
- 提问者:zephyr_cc
解决者:bao110908
- 感谢:mithrilon
- 关键字:Java J2SE / 基础类 二进制 浮点数
- 答案:
格式:
float: s x*8 m*23
double: s x*11 m*52
s是符号位,x是指数位,m是尾数位
恳请指教..
---------------------------------------------------------------
转换 double 和 float 成为计算机内部的表示形式,在 Java 中主要用到 Double.doubleToLongBits(),即将一个 double 型的数转换成相同参数的 long 型数据,同理, Float.floatToIntBits() ,将一个 float 型的数转换成相同参数的 int 型数据。因为 long 与 double 和 int 与 float 在计算机内部所占用的位数是相同的。
根据 IEEE 754 的标准,浮点数的计算机内部表示除了符号位、指数位和尾数位之外,还有一个隐含位(不在计算机内部表示),这一位需要通过某些算法进行计算而得出的,这里就从略了。
public static void main(String[] args) {
double pi = Math.PI;
float s = 3.5454f;
char[] d = toCharBits(Double.doubleToLongBits(pi), 64);
System.out.print(pi + ": ");
outputBits(d);
char[] f = toCharBits(Float.floatToIntBits(s), 32);
System.out.print(s + ": ");
outputBits(f);
}
// 在转换成二进制表示时,不采用 Long.toBinaryString() 和 Integer.toBinaryString(),
// 因为这两个方法会略去高位为“0”的数据,造成位数遗失,
// 为了避免出现位数不足的情况,实现将其转为字符数组,
// 以便于进行其他操作(比如:分解符号位、指数位、数值位和分析隐含位等操作)
public static char[] toCharBits(long num, int size) {
char bits[] = new char[size];
for (int i = size-1; i >= 0; --i) {
bits[i] = (num & 1) == 0 ? '0' : '1';
num >>>= 1;
}
return bits;
}
public static void outputBits(char[] charBits){
for(int i = 0; i < charBits.length; i++){
System.out.print(charBits[i]);
}
System.out.println();
}
- 评价:
给朵鲜花(3)
扔个鸡蛋(0)