浮点数(float)与十六进制(hexadecimal)之间的转换 | 您所在的位置:网站首页 › 274转换为16进制 › 浮点数(float)与十六进制(hexadecimal)之间的转换 |
以32位单精度浮点数为例,按IEEE 754规范的定义,使用32个位元来存储单精度二进制小数。 --------------------------------------------------------- | 1 | 8 | 23 位长 | --------------------------------------------------------- | S | Exp | Fraction | --------------------------------------------------------- | 31 | 30至23 | 22至0位编号 | | | 偏正值+127 | (从右边开始为0) | --------------------------------------------------------- 其中,S为符号位(0为正,1为负),Exp为指数位,Fraction为有效数位。 指数部分即使用所谓的偏正值形式表示,实际值为表示值与一个固定值(32位的情况是127)的和。 单精度的指数部分是-126~+127加上127,指数值的大小从1~254(0和255是特殊值)。 浮点小数计算时,指数值减去偏正值将是实际的指数大小。 例子:将浮点数6.91转换为十六进制数。 1、将6.91转换成二进制形式,有效位长为31(8+23) -> 整数:6(10进制) -- 110(2进制,实际位长为3) -> 小数:0.91(10进制)-- 111010001111010111000(2进制,实际位长21(23-3+1)) 小数转换为二进制的方法:小数部分乘以2,取整数部分依次从左往右放在小数点后,直至小数点后为0。 0.91 * 2 = 1.82 ... 1 0.82 * 2 = 1.64 ... 1 0.64 * 2 = 1.28 ... 1 0.28 * 2 = 0.56 ... 0 0.56 * 2 = 1.12 ... 1 0.12 * 2 = 0.24 ... 0 0.24 * 2 = 0.48 ... 0 0.48 * 2 = 0.96 ... 0 0.96 * 2 = 1.92 ... 1 0.92 * 2 = 1.84 ... 1 0.84 * 2 = 1.68 ... 1 0.68 * 2 = 1.36 ... 1 0.36 * 2 = 0.72 ... 0 0.72 * 2 = 1.44 ... 1 0.44 * 2 = 0.88 ... 0 0.88 * 2 = 1.76 ... 1 0.76 * 2 = 1.52 ... 1 0.52 * 2 = 1.04 ... 1 0.04 * 2 = 0.08 ... 0 0.08 * 2 = 0.16 ... 0 0.16 * 2 = 0.32 ... 0 至此,6.91的二进制为:110.111010001111010111000 2、将原始二进制值规范化:调整使其实数的第一位大于1小于2 6.91 = 1.10111010001111010111000*2^2 3、构造浮点数的二进制原型 S: 0 Exp: 2 + 127(10进制) = 129(10进制) = 10000001(2进制) Fraction: 10111010001111010111000 (注意:小数点前面的1不要了) 4、重新组合并由二进制转换成十六进制 0 10000001 10111010001111010111000 = 0100 0000 1101 1101 0001 1110 1011 1000 = 4 0 D D 1 E B 8 即6.91的十六进制为0x40DD 1EB8 |
CopyRight 2018-2019 实验室设备网 版权所有 |