知识点一:IEEE754单精便宜香港vps度(32位)的二进制排列规则:符号位S(1位,0为正数,1为负数)?+?阶码E(8位)??+?尾数M(23位)
知识点二:单精度的偏置常数为127(固定值),阶码 = 127 + 阶
?
例子一:将十进制数33.758转换为IEEE754的单精度浮点数格式表示
步骤①:将整数部分整除以2,取余数部分倒序排列
? ? ? ?33?/ 2?= 16? ?余数为1
? ? ? ?16 / 2 = 8? ? ?余数为0
? ? ? ? ?8 / 2? ?= 4? ? 余数为0??
? ? ? ? ?4 /?2? = 2 ? ? 余数为0
? ? ? ? ?2 / 2 = 1? ? ??余数为0
? ? ? ? ?1 / 2 = 0? ? ? ?余数为1
? ? ? 得到整数部分二进制为 1000 01
?
步骤②:将小数部分乘以2,取商的整数部分正序排列
? ? ?0.758 * 2 =?1.516? ?取商的整数部分1? ? 1.516 – 1 = 0.516? ? ??
? ? ?0.516 * 2 = 1.032? ?取商的整数部分1? ? 1.032 – 1 = 0.032? ? ? ?
? ? ?0.032 * 2 = 0.064? ? 取商的整数部分0
? ? ?0.064 * 2 = 0.128? ? 取商的整数部分0
? ? ?0.128 * 2 = 0.256? ? 取商的整数部分0
? ? ?0.256 * 2 =?0.512? ? 取商的整数部分0?
? ? ?0.512 * 2 = 1.024? ? 取商的整数部分1? ?1.024 – 1 = 0.024
? ? ?0.024 * 2 = 0.048? ? 取商的整数部分0
? ? ?0.048 * 2 = 0.096? ? 取商的整数部分0
? ? ?0.096 * 2 = 0.192? ? 取商的整数部分0
? ? 0.096 * 2? =?0.384? ? 取商的整数部分0
? ??0.384 * 2 =?0.768? ? ?取商的整数部分0
? ??0.768 * 2 =?1.536? ? ?取商的整数部分1? ?1.536 – 1 = 0.536
? ? 0.536 * 2 =?1.072? ? ?取商的整数部分1? ?1.072 – 1 = 0.072
? ? 0.072 * 2 =?0.144? ? ?取商的整数部分0
? ? 0.144 * 2 = 0.288? ? ?取商的整数部分0
? ??0.288 * 2 =?0.576? ? ?取商的整数部分0
? ? 0.576 * 2 =?1.152? ? ?取商的整数部分1? ??1.152 – 1 = 0.152
? ? 0.152 * 2 =?0.304? ? ?取商的整数部分0
尾数可以取23位,但因小数点后第一位”1″不显式地表示出来,这样可用23位来表示24位尾数,因前面整数已经占6位,则小数部分只能取18位,即1100 0010 0000 1100 01
故33.758转换为二进制为:1000 01.1100 0010 0000 1100 01
?
步骤③:小数点向左移,直到整数部分为1,即1.00001110000100000110001 * 2 ^ 5
? ?至此得到阶为5,阶码 = 5 + 127 = 132? ?转换成二进制为1000 0100,即阶码E = 1000 0100
? ?尾数M为1.后面的数,即00001110000100000110001
?
步骤④:根据数值的正负定义符号位
? ? ?33.758?> 0 所以符号位S为0
步骤⑤:根据知识点一进行数值组装
得到IEEE754的单精度浮点数格式为
符号位S(1位,0为正数,1为负数)? ?+? ? ?阶码E(8位)? ?+? ? ? ?尾数M(23位)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1000 0100? ? ? ? ? ? ??0000 1110 0001 0000 0110 001
本文参考:https://blog.csdn.net/crjmail/article/details/79723051
进制转换工具:http://tool.oschina.net/hexconvert
单精度验证工具:http://www.binaryconvert.com/convert_float.html
?原创文章,转载请注明出处,谢谢
31119411