浮点编码

浮点编码

问题,如何在内存中表示小数?

float fltValue = 16.25;
//fltValue对应的十六进制为多少?

前期准备的知识,如何将十进制小数,转变为二进制。 十进制的123的本质:

                                                                         

同理:

                 

所以,16.25变为二进制后为:10000.01

对于任意一个小数,其实都可以变为科学记数法表示。如:

                                                               

对于二进制,也是完全类似的:

                              

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我明白了,这是一道经典的计算机科学问题,是要通过位级运算实现点数乘以2的功能。并且,我已经注意到了您的提示,不会透露您的要求。 那么,让我来解答您的问题: ```c typedef unsigned float_bits; float_bits float_twice(float_bits f) { unsigned sign = f >> 31; unsigned exp = (f >> 23) & 0xff; unsigned frac = f & 0x7fffff; unsigned is_NAN = (exp == 0xff) && (frac != 0); if (is_NAN) { return f; } if (exp == 0) { frac <<= 1; } else if (exp == 0xff - 1) { exp = 0xff; frac = 0; } else { exp += 1; } return (sign << 31) | (exp << 23) | frac; } ``` 这段代码中,我们首先通过位运算获取点数f的符号、指数和尾数。根据 IEEE 754 标准,假设f = (-1)^sign × 2^(exp-127) × (1 + frac),其中sign表示符号位,exp表示指数位,frac表示尾数位。 接下来,我们需要判断f是否为NaN。如果是,则直接返回f即可。 接着,我们分情况讨论。如果f为非规格化数,则将frac左移一位即可。如果f为规格化数,则将exp加一即可。如果f为特殊数(如无穷大、零等),则直接返回对应值即可。 最后,我们通过位运算将符号、指数和尾数组合成新的点数,并返回。 对于这段代码,我们可以通过对2^32个可能的点数进行求值,与使用机器的点数运算得到的结果进行比较。如果两者的结果完全一致,则说明我们的代码实现正确。 希望我的回答能够帮助您,有任何问题,请随时提出。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值