分享

float(浮点数或实数)与Hexadecimal(十六进制)之间的转换

 rookie 2015-04-11

先看一下IEEE关于浮点数的定义:

IEEE 754规定了四种表示浮点数值的方式:单精确度(32位元)、双精确度(64位元)、延伸单精确度(43位元以上,很少使用)与延伸双精确度(79位元以上,通常以80位元实做)。只有32位元模式有强制要求,其他都是选择性的。

 

32位单精度

单精度二进制小数,使用32个位元存储。

1 8 23 位长
S Exp Fraction
31 3023
偏正值 +127
220 位编号(从右边开始为0)

S为符号位

Exp为指数位

Fraction为有效数位

指数部分即使用所谓的偏正值形式表示,实际值为表示值与一个固定值(32位的情况是127)的和。采用这种方式表示的目的是简化比较。因为,指数的值可能为正也可能为负,如果采用补码表示的话,全体符号位S和Exp自身的符号位将导致不能简单的进行大小比较。正因为如此,指数部分通常采用一个无符号的正数值存储。单精度的指数部分是?126~+127加上127 ,指数值的大小从1~254(0和255是特殊值)。浮点小数计算时,指数值减去偏正值将是实际的指数大小。

 

例如有一个浮点数是6.91,如何将其转换为十六进制呢?

 

首先将6.91转换为二进制形式:

110.111010001111010111000

 

将其规范化:调整使其实数第一位大于1小于2

 

6.91 =  1.10111010001111010111000 * 2^2

 

基本原型出来了

S:0

EXP : 2+127(10进制) =129(10进制) = 10000001(2进制)

Fraction : 10111010001111010111000 (注意:小数点前面的1不要了)

 

组合一下: 0  10000001  10111010001111010111000

            =  0100 0000 1101 1101 0001 1110 1011 1000

            =  4       0        D      D       1       E       B       8

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多