原文网址: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语言的Q格式使用详解

    用过DSP的应该都知道Q格式吧: 目录 1 前言 2 Q数据的表示 2.1 范围和精度 2.2 推导 3 Q数据的运算 3.1 0x7FFF 3.2 0x8000 3.3 加法 3.4 减法 3.5 ...

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

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

  4. 【PNG格式中文详解】

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

  5. printf格式控制详解

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

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

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

  7. Nginx日志格式log_format详解

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

  8. Open Flash Chart图表的JSON格式基本属性详解

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

  9. 【转】TCP报文格式定义详解

    TCP报文是TCP层传输的数据单元,也叫报文段. 1.端口号:用来标识同一台计算机的不同的应用进程. 1)源端口:源端口和IP地址的作用是标识报文的返回地址. 2)目的端口:端口指明接收方计算机上的应 ...

随机推荐

  1. Linux &amp; Mac curl 命令行使用——POST&amp;GET

    http提交一个表单,比較经常使用的是POST模式和GET模式 在curl的命令行下,GET模式什么option都不用.仅仅须要把变量写在url里面就能够了 比方: curl http://www.s ...

  2. win32下进程间通信——共享内存

    一.引言     在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.WIN32 API提供了许多函数使我们能够方便高效的进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换 ...

  3. Ubuntu设置环境变量的几种方法

    1.Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类: 1.1 永久的:需要修改配置文件,变量永久生效. 1.2 临时的:使用export命令声明即可,变量在关闭shell时失效 ...

  4. 12、SQL Server 行列转换

    SQL Server 行转列 在SQL Server 2005中PIVOT 用于将列值转换为列名(行转列),在SQL Server 2000中是没有这个关键字的 只能用case语句实现. --创建测试 ...

  5. 如何成为一名优秀的web前端工程师(转给自己,共勉)

    来源:王子墨的博客 程序设计之道无远弗届,御晨风而返.———— 杰佛瑞 · 詹姆士 我所遇到的前端程序员分两种: 第一种一直在问:如何学习前端? 第二种总说:前端很简单,就那么一点东西. 我从没有听到 ...

  6. C#中的线程二(BeginInvoke和Invoke)

    近日,被Control的Invoke和BeginInvoke搞的头大,就查了些相关的资料,整理如下.感谢这篇文章对我的理解Invoke和BeginInvoke的真正含义 . (一)Control的In ...

  7. for update被锁定解锁

     查找被锁定的表,用户,session:SELECT object_name, machine, s.sid, s.serial#FROM gv$locked_object l, dba_object ...

  8. sql - 复制表

    1,复制表结构和内容 1)这个表: select * into new_table_name from old_table_name ref:SQL复制数据表及表结构

  9. js字符串比较

    1,大写字母小于小写字母 a='ang',b='Zh' 那么a>b 2,可以使用字符串的toUpperCase()/toLowerCase()方法不区分字母的大小写. a.toUpperCase ...

  10. 用XMPP实现完整Android聊天项目

    简介 这是一个完整的xmpp的Android的项目服务端使用openfire3.9.3客户端使用Android4.2.2 集成第三方:百度地图sdkasmack.jaruniversal-image- ...