float认识
在IEEE 754浮点数标准中,有效数字位部分的组合涉及将整数部分和小数部分合并为一个规范的二进制小数。这个过程通常是在将十进制数转换为IEEE 754标准的二进制浮点数时进行的。以下是将整数部分和小数部分组合成有效数字位部分的详细步骤:
一、整数部分转换
- 十进制整数转二进制:
- 使用除2取余法,将十进制整数不断除以2,并记录每次的余数。
- 将得到的余数从最后一位开始倒序排列,即可得到该整数的二进制表示。
二、小数部分转换
- 十进制小数转二进制:
- 将十进制小数乘以2,得到的结果的整数部分即为该位上的二进制数(0或1)。
- 将小数部分继续乘以2,重复上述步骤,直到小数部分为0或达到所需的精度。
- 将得到的二进制数正序排列(从小数点后开始),即可得到该小数的二进制表示。
三、合并整数和小数部分
- 规范化:
- 将整数部分和小数部分合并,形成一个二进制小数。
- 为了符合IEEE 754标准,需要将这个二进制小数规范化为1.xxxxx的形式(其中x为二进制位)。这通常涉及将小数点向左或向右移动,并相应地调整指数。
- 计算指数:
- 根据小数点移动的位数,计算出实际的指数值。对于IEEE 754单精度浮点数,指数值需要加上偏置常数127(对于双精度浮点数,偏置常数为1023)。
- 组合成有效数字位:
- 在IEEE 754标准中,有效数字位(尾数)的首位总是1(对于规格化数),因此这个1可以省略不存。
- 将规范化后的二进制小数(去掉首位的1)作为尾数部分。
- 将符号位、指数部分(转换为二进制后)和尾数部分组合起来,即可得到IEEE 754标准的二进制浮点数表示。
示例
假设要将十进制数6.5转换为IEEE 754单精度浮点数:
- 整数部分:6的二进制表示为110。
- 小数部分:
- 0.5 × 2 = 1.0,取整数部分1。
- 因此,0.375的二进制表示为0.1。
- 合并:整数部分和小数部分合并为110.1。
- 规范化:将小数点左移2位,得到1.1101 × 2^2。
- 计算指数:指数值为2,加上偏置常数129,得到131(二进制为10000001)。实际整数部分有2+1=3位。
- 组合成有效数字位:尾数部分为101(省略了首位的1),符号位为0(表示正数)。注意一定要省掉首位1.
因此,6.5的IEEE 754单精度浮点数表示为
0 10000001 10100000000000000000000
23.375的IEEE 754单精度浮点数表示为如下,可以自己去验证一下
0 10000011 01110110000000000000000