作者: zengdongwu
转载地址: http://www.zengdongwu.com/article1.html
十进制科学记数法
98765 = 9.8765 * 104
尾数 基数指数
二进制科学记数法
1)1010 1011 = 1010 1011. * 20
2)1010 1011 = 1010 101.1 * 21
3)1010 1011 = 1010 10.11 * 210
4)1010 1011 = 1010 1.011 * 211
4)……
5)1010 1011 = 1.010 1011 * 2111
尾数 基数指数
小数点二进制科学记数法
101.0 1011(2) = 1.010 1011 * 210(2) = 5.34375(10)
二进制小数转十进制方法:
22 + 20 + 2-2 + 2-4 + 2-5 = 5.34375
十进制小数转二进制方法:
1)5.34375整数位为5,转二进制为101;
2)小数位0.34375 * 2 = 0.6875,整数位为0,结果101.0;
3)继续0.6875 * 2 = 1.375,整数位为1,结果101.01;
4)去掉整数继续乘2,0.375 * 2 = 0.75,结果101.010;
5)循环到没有小数为止……;
6)最终结果:101.01011。
float(32bit)二进制存储结构
0 | 1000 0001 | 0101 0110 0000 0000 0000 000 |
符号位 | 指数(8bit) | 尾数(23bit) |
原理说明:
1)第1位为符号位,0为整数,1为负数;
2)第2-9位为指数位,共8位,不足8位前面补0,由于指数没有符号位,不能表示负数,只能通过将结果减127来得到负数,所以指数位存储的结果是原指数加127,即指数2存储后指数为 2+127 = 129(10) = 1000 0001(2);
3)第10-32位为尾数位,共23位,不足23位后面补0,尾数位包含隐藏的1.X,即1.010 1011只存储0101 011,然后后面补0,最终结果为0101 0110 0000 0000 0000 000。
float转十进制方法:
1)符号位0为正数;
2)指数转十进制,1000 0001为129,需要减127,所以指数为129-127=2;
3)尾数去掉后面的0,结果为0101 011;
4)尾数前面加1. 即:1.010 1011;
5)指数为2,小数点往后移2位,即:101.0 1011;
6)转十进制22 + 20 + 2-2 + 2-4 + 2-5 = 5.34375。
代码验证:
float f = 5.34375f; System.out.println(Integer.toBinaryString(Float.floatToIntBits(f)));
采用double(64bit)二进制表示方式
0 | 0010 0000 001 |
0101 0110 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 |
符号位 | 指数(11bit) | 尾数(52bit) |
原理说明:
1)第1位为符号位,0为整数,1为负数;
2)第2-12位为指数位,共11位,不足11位前面补0,由于指数没有符号位,不能表示负数,只能通过将结果减1023来得到负数,所以指数位存储的结果是原指数加1023,即指数2存储后指数为 2+1023 = 1025(10) = 10000000 1(2);
3)第13-64位为尾数位,共52位,不足23位后面补0,尾数位包含隐藏的1.X,即1.0101011只存储0101011,然后后面补0,最终结果为0101 0110 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000。
double转十进制方法:
1)符号位0为正数;
2)指数转十进制,1000 0000 001为1025,需要减1023,所以指数为1025-1023=2;
3)尾数去掉后面的0,结果为0101 011;
4)尾数前面加1. 即:1.010 1011;
5)指数为2,小数点往后移2位,即:101.0 1011;
6)转十进制22 + 20 + 2-2 + 2-4 + 2-5 = 5.34375。
代码验证:
double d = 5.34375; System.out.println(Long.toBinaryString(Double.doubleToLongBits(d)));
PS:double转换方法与float一致,区别在指数位算法有所差异,且尾数大小远远超过了float,因此精度也大大提高,正常情况下浮点数均采用double。
相关推荐
浮点数转二进制,二进制转浮点数,E,PI转二进制小工具
好用的浮点数与二进制转换工具,通讯开发必备实用小工具,4字节浮点数转换,支持正序倒序转换。浮点数转二进制,二进制转浮点数,转换准确。
如何转换浮点数的二进制格式为十进制,本文档给出了实现该任务的简单方法,使用一条C语句即可。
根据IEEE754规定写了个float型数据与二进制数转换的方法
在嵌入式开发中,很多情况会要分析协议,协议中有时候会出现二进制传输的浮点数,可以用分析工具查看浮点数对应的十六进制数,但要换算成十进制还是挺麻烦的,可以在网上找到浮点数和十六进制转换的工具,但功能应用...
这是一款浮点数与二进制之间的相互转换的工具,源代码实现了把浮点数转化为四个字节bite位,四个字节的bite位转化为浮点数
C语言浮点数的二进制表示
自动操作<br><br>第18章 从算盘到芯片<br><br>第19章 两种典型的微处理器<br><br>第20章 ASCII 码和字符映射<br><br>第21章 总线连接<br><br>第22章 操作系统<br><br>第23章 定点数和浮点数<br><br>第24章 ...
自己用Qt5.4.1的Qt Creator开发的IEEE754浮点数与十六进制数转换器,可以供Qt初学者学习槽函数的用法,也可以学习IEEE754浮点数与十六进制数转换的算法。两个文本框关联,实时将浮点数与十六进制数互相转换,代码...
浮点数与十进制数转换工具,可用浮点数转十进制,也可以用十进制转浮点数
在软件和单片机程序通讯过程中浮点数的位数不同导致的数据问题通常很令人头疼,今天有空整理了一段代码,其中十进制到2进制/16进制转化部分借鉴前辈的内容,32位到16位的内容是自己写的部分,有什么问题大家多多指教...
浮点数的二进制转换
根据IEEE754规定写了个float型数据与二进制数转换的方法
<br>第三部分 数值计算与趣味数学篇<br> <br>075 绘制余弦曲线和直线的迭加<br>076 计算高次方数的尾数 <br>077 打鱼还是晒网 <br>078 怎样存钱以获取最大利息 <br>079 阿姆斯特朗数 <br>080 亲密数 <br>081 自守数 ...
本代码实现了十进制浮点数与IEEE745标准的32位二进制浮点数的互相转换,二进制浮点数有十六进制和二进制两者表示形式,
IEEE浮点数计算机内二进制表示显示.viIEEE浮点数计算机内二进制表示显示.viIEEE浮点数计算机内二进制表示显示.vi
32位浮点数转换十六进制数,一个四字节十六进制数可按四种顺序转换成32位浮点数,方便串口通讯时的数据正误预判。
<br>第11章 数值运算协处理器<br> 11.1 协处理器的数据格式 <br> 1 有符号整数<br> 2 BCD码数据<br> 3 浮点数 <br> 11.2 协处理器的结构 <br> 11.3 协处理器的指令系统 <br> 1 操作符的命名规则<br> 2 数据...
该代码可以实现单精度浮点数和16进制字符之间的转换,包含源代码
浮点数十六进制转换器 实现小数 和 IEEE格式16进制数据 之间的直接转换 强烈推荐!!