CSDN=>FAQ=>FAQ 展示
  • 问题内容:如何在屏幕上显示二进制的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)
相关FAQ
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo