c - 基数右边的分数 - float 转换

标签 c model bit

当使用浮点位模型将数字从 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/

相关文章:

c++ - 函数原型(prototype)和函数实现签名不一致地使用 const 可以吗?

java - 如何让斯坦福 CoreNLP 使用您创建的训练模型?

php - 如何检索 Eloquent 模型,相关模型中的字段等于 "xx"?

c - 如何在 C 中将无符号整数作为二进制值返回?

c - int *val = otherVal 和 int val = otherVal 之间的指针差异

c++ - 使用 ADS(备用数据流)隐藏可执行文件

c - 泛化函数指针

ios - 如何使用外部数据源转换单元格类型

linux - bash命令检查目录是否可执行

C - 旋转 64 位无符号整数