IEEE-754标准(32位) 十六进制转换十进制浮点数

1.将(32位)16进制IEEE-754标准浮点数就是用十六进制表示浮点,称为单精度浮点数。

举例:IEEE-754标准浮点数表示为 404FC593 H
16进制浮点数与十进制的转化步骤:
1、转换为二进制 0 10000000 10011111100010110010011
2、其第0位 为符号位,为0则表示正数,反之1为复数,其读数值用 s 表示;
3、第1~8位为幂数,其读数值用 e 表示;
4、第9~31位共23位作为系数,视为二进制纯小数,假定该小数的十进制值为 x
则按照规定,该浮点数的值用十进制表示为:= (-1)^s * (1 + x) * 2^(e - 127)

2.幂数的计算

10000000 转换为十进制 128

3.系数的计算

二进制对应的位数的数*2的负位置,再相加
10011111100010110010011

1 1 * 2^(-1)
0 0 * 2^(-2)
0 0 * 2^(-3)
1 1 * 2^(-4)
... ...
1 1 * 2^(-23)
相加可得
0.62321698665618896

4.十进制最后换算

(-1)^0 * (1+ 0.62321698665618896) * 2^(128-127) = 3.246433973312378

 $v) {
        $xs_s += $v * pow(2, -($k + 1));
    }
    // (32位)16进制IEEE-754标准浮点数就是用十六进制表示浮点,称为单精度浮点数
    $res = pow('-1', $s) * (1 + $xs_s) * pow(2, $zE10);
    // 保留3位小数
    $res = round($res, 3);

    return $res;
}
// 例
echo byte16float('404FC593');  // 3.246

你可能感兴趣的:(IEEE-754标准(32位) 十六进制转换十进制浮点数)