IEEE754单精度标准下,十进制数字与机器码的互转

IEEE754单精度标准下,十进制数字与机器码的互转

IEEE754标准(单精度):

机器码一共32位,其中:
数符号1位(1负数,0正数);阶码8位(移码);尾数23位(补码)。

特别注意1:这里阶码的移码与定点数中的移码略有所不同,定点数的移码可以由补码取反符号位得来(偏移128),而这里是偏移127

特别注意2:尾数的最高位默认1,所以这个1可以省略不写

十进制数字 ⇒ 机器码

以-8.25为例来说明:
数值为负,符号位为1;
正数部分8D = 1000B,小数0.25=0.01B。所以,-8.25D=1000.01B。根据标准,规格化,
1000.01B
= 1.00001 * (2)^ (3 D)

尾数为补码,正数化为.01XXX形式,负数为1.0XXX形式,规格化时候需要注意

阶码这里取值为3D,化为移码形式,E-127=3,所以
E = 130D = 1000 0010

利用 E-127=次方数 这个公式,求得E,再把E直接化为二进制数字,即为阶码的移码

下面继续处理尾数,
尾数原码000 0100 0000 0000 0000 0000B,
转化为补码: 000 0100 0000 0000 0000 0000B (正数原码=补码)

所以,把所有连接起来,-8.25的机器数为:
1 1000 0010 000 0100 0000 0000 0000 0000B

读者可以用现在转换工具自行验证结果的正确性:
在线转换工具

机器码 ⇒ 十进制数字

下面反过来,用机器码转化为十进制数字,
以 41A4C000H为例
先把16进制转化为二进制:
41A4C000H = 0100 0001 1010 0100 1100 0000 0000 0000B

首位为0 所以确认这个数字为正数;

阶码为100 0001 1B = 131D,所以E = 131,
阶数 = 131 -127 = 4;

尾数补码=.010 0100 1100 0000 0000 0000B
尾数原码=1.010 0100 1100 0000 0000 0000B (添补上省去的1)

所以,数字为1.010010011 * 2^4 (4次方相当于右移4位)= 10100.10011=20.59375

  • 10
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用C语言实现IEEE 754十六进制数字十进制的示例代码: ```c #include <stdio.h> #include <math.h> // 将 16 进制字符转换为对应的整数值 int hex_char_to_int(char c) { if (c >= '0' && c <= '9') { return c - '0'; } else if (c >= 'a' && c <= 'f') { return c - 'a' + 10; } else if (c >= 'A' && c <= 'F') { return c - 'A' + 10; } else { return -1; } } // 将 16 进制字符串转换为对应的整数值 int hex_str_to_int(char* hex_str) { int len = strlen(hex_str); int result = 0; for (int i = 0; i < len; i++) { int digit = hex_char_to_int(hex_str[i]); if (digit < 0) { return -1; } result = result * 16 + digit; } return result; } // 将 IEEE 754 标准单精度浮点数转换为对应的十进制数 float ieee754_hex_to_float(char* hex_str) { // 将 16 进制字符串转换为对应的整数值 int hex = hex_str_to_int(hex_str); if (hex < 0) { return NAN; } // 将整数值转换为 IEEE 754 标准单精度浮点数 float* num = (float*)&hex; // 返回转换后的十进制数 return *num; } int main() { // 测试数据 char hex_str[] = "40490fdb"; // 调用函数进行转换 float result = ieee754_hex_to_float(hex_str); // 输出结果 printf("IEEE 754 十六进制表示 %s 转换为十进制数为 %f\n", hex_str, result); return 0; } ``` 该程序定义了两个函数:`hex_char_to_int` 和 `hex_str_to_int`,用于将 16 进制字符和 16 进制字符串转换为对应的整数值。然后定义了一个函数 `ieee754_hex_to_float`,用于将 IEEE 754 标准单精度浮点数的 16 进制表示转换为十进制数。该函数首先将 16 进制字符串转换为对应的整数值,然后将整数值转换为 IEEE 754 标准单精度浮点数,并返回转换后的十进制数。 在主函数中,我们将测试数据 `"40490fdb"` 作为参数传递给 `ieee754_hex_to_float` 函数,并输出转换后的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值