原文网址: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. Open Flash Chart图表的JSON格式基本属性详解

    http://blog.csdn.net/wangwenhui11/article/details/4283571 数据文件必须是JSON格式.JSON对象的基本格式: {} 把所有对象都编写在{}里 ...

  8. C# XML序列化与反序列化与XML格式详解

    1.https://www.cnblogs.com/sandyliu1999/p/4844664.html XML是有层次结构的,序列化实际就是内存化,用连续的结构化的内存来存储表示一个对象,那么这两 ...

  9. OSPF详解

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

随机推荐

  1. 4.DB Initialization(数据库初始化)[EF Code-First系列]

    前面的例子中,我们已经看到了Code-First自动为我们创建数据库的例子. 这里我们将要学习的是,当初始化的时候,Code-First是怎么决定数据库的名字和服务的呢??? 下面的图,解释了这一切! ...

  2. php每天一题:怎么在不使用第三个变量的情况下交换两个变量的值

    $a = 'php'; $b = 'my'; list($a,$b) = array($b,$a); echo $a,$b; 很简单,大家试一下是不是交换了!

  3. 使用visual studio 2012 编译opencv2.4.9

    最近,由于需要从opencv源码部分对opencv中的某个函数进行修改,以提升算法的速度,因此一直在尝试使用vs2012来编译opencv.期间不乏多次的失败.今天通过实验发现了自己编译的opencv ...

  4. nginx源码学习资源(不断更新)

    nginx源码学习是一个痛苦又快乐的过程,下面列出了一些nginx的学习资源. 首先要做的当然是下载一份nginx源码,可以从nginx官方网站下载一份最新的. 看了nginx源码,发现这是一份完全没 ...

  5. Introducing Microsoft Sync Framework: Sync Services for File Systems

    https://msdn.microsoft.com/en-us/sync/bb887623 Introduction to Microsoft Sync Framework File Synchro ...

  6. D&amp;F学数据结构系列——二叉堆

    二叉堆(binary heap) 二叉堆数据结构是一种数组对象,它可以被视为一棵完全二叉树.同二叉查找树一样,堆也有两个性质,即结构性和堆序性.对于数组中任意位置i上的元素,其左儿子在位置2i上,右儿 ...

  7. memcached 使用积累

    1.memcahed在windows上的安装 . 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached . 在终端(也即cmd命令界面)下输入 ‘c:\memc ...

  8. HDU 1025 Constructing Roads In JGShining&#39;s Kingdom(DP+二分)

    点我看题目 题意 :两条平行线上分别有两种城市的生存,一条线上是贫穷城市,他们每一座城市都刚好只缺乏一种物资,而另一条线上是富有城市,他们每一座城市刚好只富有一种物资,所以要从富有城市出口到贫穷城市, ...

  9. scrollview中停止滚动的监听

    [补充]可以在主线程控制,特别注意 scrollView3.postDelayed(new Runnable() { @Override public void run() { scrollView3 ...

  10. python引入模块时import与from ... import的区别

    import datetime是引入整个datetime包,如果使用datetime包中的datetime类,需要加上模块名的限定. import datetime print datetime.da ...