当使用浮点位模型将数字从 10 进制转换为二进制时,是什么决定了您将分数“零填充”到基数右侧的多少个零?
以-44.375为例 这是我的系统编程类(class)中的一个测试问题,下面是教授为类提供的答案......我发布这个是因为下面的大多数评论似乎都在争论我的教授在答案中所说的内容并引起一些困惑。
Answer: 1 1000 0100 0110 0011 0000 0000 0000 000 -- sign bit: 1 -- fixed point: -44.375 = 25 + 23 + 22 + 2-2 + 2-3
= 101100.011 = 1.01100011 * 2<sup>5</sup>
-- exponent: 5 + 127 = 132 = 1000 0100
-- fraction: 0110 0011 0000 0000 0000 000
标记:
-- 1 mark for correct sign bit -- 2 marks for correct fixed point representation -- 2 marks for correct exponent (in binary) -- 2 marks for correct fraction (padded with zeros)
最佳答案
除非 float
非常 小,否则没有left 分数的“零填充”。
这里的样本是 -1.63(十六进制)* 幂(2,5(十进制))。
调整指数直到前导数字为1。
printf("%a\n", -44.375);
// -0x1.63p+5
[编辑]
您的教授希望将“正确分数的 2 分(用零填充)”视为 float
中的位数,因此您示例中的有效数字是
1.0110 0011 0000 0000 0000 000
前导 1
未明确存储在典型的 float
中。
OP“是什么决定了您将小数部分“零填充”到基数右侧的多少个零?
答:IEEE 754 binary32(一种流行的 float
实现)具有 24 位有效位。前导位(通常为 1)和 23 位小数。因此,您的“正确”零填充会填充 23 个位置。
关于c - 基数右边的分数 - float 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20572935/