原文网址:http://www.cnblogs.com/zjujunge/archive/2012/09/13/2682613.html

Intel聘请了最好的数值分析家来为8087FPU设计浮点数格式,他们设计的KCS浮点数标准的工作是如此出色,因此IEEE将这种格式作为IEEE浮点数格式的基础。

  为了满足广泛的性能与精度需求,intel实际实现三种浮点格式:单精度、双精度以及扩展精度,本文以前两种讲解。

  1. 单精度浮点格式

  单精度使用24位的尾数与8位的阶码,尾数通常表示的值在(1.0,2.0),尾数的最高为总是假定为1,正好是在二进制二进制小数点左边的第一个位,余下的23个尾数位则在小数点右边,代表该数。具体见下图M为尾数位。

   隐含位的存在导致尾数总是大于或等于1,小数点右边的每个位代表一个值(0或1)乘以2一个负幂。尽管从1到2有无限个数,我们能够表示的只有八百万个(223)。

  尾数使用1补码格式二不是2的补码。第31位(S)符号决定正负。

  阶码使用余-127格式简化了浮点数的比较。

  2.双精度浮点

  参照单精度浮点解析以及上图即可明白。

  3.浮点转成二进制显示部分源代码(C#)

  单精度浮点数显示

  

private void fp_Disp(double number)
        {
            double zhenshu, xiaoshu, jieguo;
            string strZ, strX = "", strJ = "";
            Int64 numb = 127;
            int i = 1, len, le, len2, len3, Bias = 127;
            string s = "", str1, str2, Jiema = "", weishu = "", jia;//,ti_Jiema="";
            if (number > 0)
            {
                s = "0";
            }
            else
            {
                s = "1";
            }
            zhenshu = Math.Floor(Math.Abs(number)); //整数部分
            numb = Convert.ToInt64(zhenshu);
            strZ = Convert.ToString(numb, 2);

            xiaoshu = Math.Abs(number) - zhenshu;
            for (i = 0; ((xiaoshu != 0) && (i < 23)); i++)
            {
                jieguo = xiaoshu * 2;
                strJ = jieguo.ToString();
                strX += strJ.Substring(0, 1);
                zhenshu = Math.Floor(jieguo);
                xiaoshu = jieguo - zhenshu;
            }
            strJ = strZ + "." + strX;
            str1 = strJ.Substring(0, 1);
            if (str1.Equals("1"))
            {
                len = strZ.Length;
                le = len + Bias - 1;
                Jiema = Convert.ToString(le, 2);
                len2 = Jiema.Length;
                if (len2 < 8)
                {
                    for (i = 0, jia = ""; i < 8 - len2; i++)
                    {
                        jia += "0";
                    }
                    Jiema = jia + Jiema;
                }
                str2 = strZ.Substring(1, len - 1) + strX;
                len = str2.Length;
                if (len > 23)
                {
                    weishu = str2.Substring(0, 23);
                }
                else
                {
                    weishu = str2;
                }
            }
            else
            {
                len = strX.IndexOf("1");
                le = Bias - (len + 1);
                Jiema = Convert.ToString(le, 2);
                len2 = Jiema.Length;
                if (len2 < 8)
                {
                    for (i = 0, jia = ""; i < 8 - len2; i++)
                    {
                        jia += "0";
                    }
                    Jiema = jia + Jiema;
                }
                len3 = strX.Length;
                if (len3 == (len + 1))
                {
                    weishu = "0";
                }
                else
                {
                    weishu = strX.Substring(len + 1);
                }
            }
            strJ = s + Jiema + weishu;
            len = strJ.Length;
            if (len < 32)
            {
                for (i = 0; i < 32 - len; i++)
                {
                    strJ += "0";
                }
            }

            fp_sBox.Text = s;
            fp_eBox.Text = Jiema;
            len = 23 - weishu.Length;
            for (i = 0; i < len; i++)
                weishu += "0";
            fp_mBox.Text = weishu;
            byte fe;
            fe = Convert.ToByte(Jiema, 2);
            fp_eBox1.Text = fe.ToString();
            fp_eBox2.Text = (fe - Bias).ToString();
            //ti处理
            ti_sBox.Text = s;
            ti_eBox2.Text = (fe - Bias).ToString();
            ti_eBox1.Text = (fe + 1).ToString();
            Jiema = Convert.ToString(fe + 1, 2);
            len=Jiema.Length;
            for (i = 0; i < 8 - len; i++)
            {
                Jiema = "0" + Jiema;
            }
            ti_eBox.Text = Jiema;
            ti_mBox.Text = weishu;
            dti_eBox.Text = Jiema;
        }

  4.TI处理器的浮点表示法

  具体见下图

【转】浮点格式IEEE754详解的更多相关文章

  1. [转帖]IP /TCP协议及握手过程和数据包格式中级详解

    IP /TCP协议及握手过程和数据包格式中级详解 https://www.toutiao.com/a6665292902458982926/ 写的挺好的 其实 一直没闹明白 网络好 广播地址 还有 网 ...

  2. C 语言 printf格式控制详解

    闲来无事,整理了一下C语言printf() 的格式控制语句. PS:详细来源于网络. printf的格式控制的完整格式: %  -  0  m.n  l或h  格式字符 下面对组成格式说明的各项加以说 ...

  3. 【PNG格式中文详解】

        技术文档(Document)   PNG格式 PNG是20世纪90年代中期开始开发的图像文件存储格式,其目的是企图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性.流式网 ...

  4. printf格式控制详解

    format 参数输出的格式,定义格式为 %[flags][width][.precision][length]specifier specifier在最后面.定义了数据类型. Where the s ...

  5. js正则表达式 URL格式匹配详解

    0.URL格式 protocol :// hostname[:port] / path / [;parameters][?query]#fragment [;parameters]没见过 这里就不做相 ...

  6. Nginx日志格式log_format详解

    PS:Nginx日志相关指令主要有两条,一条是log_format,用来设置日志格式,另外一条是access_log,用来指定日志文件的存放路径.类型.缓存大小等,一般放在Nginx的默认主配置文件/ ...

  7. OSPF详解

    OSPF 详解 (1) [此博文包含图片] (2013-02-04 18:02:33) 转载 ▼ 标签: 端的 第二 以太 第一个 正在 目录 序言 初学乍练 循序渐进学习OSPF 朱皓 入门之前 了 ...

  8. Java字节码(.class文件)格式详解(一)

    原文链接:http://www.blogjava.net/DLevin/archive/2011/09/05/358033.html 小介:去年在读<深入解析JVM>的时候写的,记得当时还 ...

  9. java分享第十五天(log4j 格式详解)

    log4j 格式详解  log4j.rootLogger=日志级别,appender1, appender2, -. 日志级别:ALL<DEBUG<INFO<WARN<ERRO ...

随机推荐

  1. memcached服务器

    memcached是高性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,提高动态web应用的速度和可扩展性.为了提高性能,memcached把数据存储在内存中,重启memcach ...

  2. android系统自带的日期、时间对话框的用法

    代码: package com.test; import java.util.Calendar; import android.app.Activity; import android.app.Dat ...

  3. Django 之 models的 F() 和 Q() 函数

    前提: app名称为core,models.py 如下: #coding: utf8 import datetime from django.db import models class Order( ...

  4. Cheatsheet: 2015 09.01 ~ 09.30

    Web A Guide to Vanilla Ajax Without jQuery Gulp for Beginners A Detailed Walkthrough of ASP.net MVC ...

  5. SQL截取字段字符串的方法

    set @str='WX15-53-H-53-99-15-335-23'; select @str as '字符串' select len(@str) as '字符长度' select charind ...

  6. ruby -- 基础学习(三)设置中国时区时间

    Rails连接MYSQL数据库,默认显示UTC时间.如果想要改成中国时区时间,按照下面修改: 在config/application.rb中找到 class Application < Rail ...

  7. JAVA基础学习day19--IO流一、FileWrite与FileReader

    一.IO简述 1.1.简述 IO:input/output IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的对象都在IO包中. 1.2.结构 字节流抽象类: ...

  8. HTTP层 —— 中间件

    1.简介 HTTP 中间件为过滤进入应用的 HTTP 请求提供了一套便利的机制.例如,Laravel 内置了一个中间件来验证用户是否经过授权,如果用户没有经过授权,中间件会将用户重定向到登录页面,否则 ...

  9. 采用subversion管理iOS资源

    1.装和配置subversionserver  在windows server上安装VisualSVN-Server.下载地址http://www.visualsvn.com/server/downl ...

  10. 泛虚拟化技术(以Xen为例)

    一.概述    最主要的特点是:修改Guest OS的内核代码.通过修改内核,使Guest OS明白自己是运行在R-1,不要直接去运行特权指令,如果要运行就去Hypercall(主动VMM陷入).   ...