免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 11357 | 回复: 17
打印 上一主题 下一主题

C语言浮点数转二进制? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-17 19:59 |只看该作者 |倒序浏览
本帖最后由 oanmo 于 2012-05-17 22:47 编辑

http://geeklu.com/2011/03/ieee754-floating-point-arithmetic/

十进制浮点数转二进制:
  (1)整数部分:除二取余,倒序排列
  (2)小数部分:乘二取整,顺序排列


问题:

(一), 一.十进制转二进制  
           0.6乘以2 得1.2 1     // 0.6x2=1.2,怎么等于1.21?
           0.2乘以2 得0.4 0     //这个0.2是怎么来的?

        
(二),三.问题解析
       所以0.1的二进制为
       0.00011001100110011001100110011….
       现在将其表示为IEEE 754 浮点数的形式
       0.1是正数,符号位为0
       0.00011001100110011…=1.100110011001…X2^(-4)
       所以其指数是-4,加上1023就是1019,1019的二进制值是01111111011

      剩下的就是尾数部门了,去除首尾的整数部分,末尾待舍去的是1001…所以需要向前进一位
      0011111110111001100110011001100110011001100110011001100110011010

       // 这个1023是哪里来的?      

       //0.00011001100110011…=1.100110011001…X2^(-4)

         0        01111111011        1001100110011001100110011001100110011001100110011010
      符号位    指数部分:2^(-4)                          尾数部分: 1.100110011001…

                                
       符号号位:0表正数,1表负数,对不对?十进制0.1为正数,所以符号位是0

       “去除首尾的整数部分,末尾待舍去的是1001…所以需要向前进一位”
       这句话的意思是:只取尾数部分(1.100110011001…)的小数点后面的部分(.100110011001…)。
       对不对?   


论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
2 [报告]
发表于 2012-05-17 22:07 |只看该作者
0.6乘2 等于1余0.2
0.2乘2 等于0余0.4
0.4乘2 等于0余0.8
0.8乘2 等于1余0.6

所以0.6的二进制就是 0.1001 1001 1001 ……

论坛徽章:
0
3 [报告]
发表于 2012-05-17 22:42 |只看该作者
(二),三.问题解析

说说这个?

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
4 [报告]
发表于 2012-05-17 23:36 |只看该作者
第三个,那就是C/C++中的浮点数格式呀
C/C++中有两种格式,分别是 float 和 double
扩展的80bits精度的我就不说了

float/double为了比较大小方便,其指数是加了固定偏移的,使之为正。打个比方,比如有个取值为-5到+5的数,可以加上一个+5的偏移,变为0到10,这样两个数比较大小起来方便,因为不需要考虑正负号的问题了。你的1023就是从这里来的,但记住float和double的固定偏移不一样,因为两者指数的范围不一样。

float/double为了尽可能的提高精度,使用类似科学计数法的方式,就是把前面的0都去掉,加到指数上。比如101.0101可以表示为1.010101*2^2,比如0.00101可以表示为1.01*2^-3。另外因为首位都是1.,所以这个1.还可以省掉(80bits临时实数不省)。但这里有一个坑,在指数最小时,没有缺省的1.0

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
5 [报告]
发表于 2012-05-17 23:38 |只看该作者
我听人说C99有可选的16bits的浮点数格式,没研究过,不知道真假

论坛徽章:
0
6 [报告]
发表于 2012-05-18 05:33 |只看该作者
不会有这么蛋疼去重新发明个16bit的浮点来的。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:50:28
7 [报告]
发表于 2012-05-18 09:17 |只看该作者
有16bit的浮点数,half float。
sb的flash格式里面就用到。

论坛徽章:
0
8 [报告]
发表于 2012-05-18 09:54 |只看该作者
bruceteen 发表于 2012-05-17 23:38
我听人说C99有可选的16bits的浮点数格式,没研究过,不知道真假


C语言一直没规定浮点数的具体表示
应该查阅编译器的float.h

论坛徽章:
0
9 [报告]
发表于 2012-05-18 12:03 |只看该作者
bruceteen 发表于 2012-05-17 23:36
第三个,那就是C/C++中的浮点数格式呀
C/C++中有两种格式,分别是 float 和 double
扩展的80bits精度的我 ...


"float/double为了比较大小方便,其指数是加了固定偏移的,使之为正"

这个固定偏移,怎样计算出来?

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
10 [报告]
发表于 2012-05-18 12:16 |只看该作者
比如 double 的阶码(就是存储指数的部分)是11bits,那么正负数两边平分一下,……
还是打个比方吧,假如阶码可表示范围是 -55 到 55,那都加上55是不是就全是正数了?
所以double的阶码便宜就是 11bits能表示的最大数除以2,也就是 0x3FF,也就是十进制的 1023
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP