C 基数-浮点转换右边的分数

C 基数-浮点转换右边的分数,c,model,bits,C,Model,Bits,当使用浮点位模型将数字从基数10转换为二进制时,是什么决定了将分数“置零”到基数右侧的零数 以-44.375为例 这是我在系统编程课程中的一个测试问题,下面是教授给全班同学的答案。。。我之所以发布这篇文章,是因为下面的大多数评论似乎都在争论我的教授在回答中所说的话,并引起了一些混乱 答复:1 1000 0100 0110 0011 0000 000 --符号位:1 --固定点:-44.375=25+23+22+2-2+2-3 =101100.011 = 1.01100011 * 25 --指数

当使用浮点位模型将数字从基数10转换为二进制时,是什么决定了将分数“置零”到基数右侧的零数

以-44.375为例 这是我在系统编程课程中的一个测试问题,下面是教授给全班同学的答案。。。我之所以发布这篇文章,是因为下面的大多数评论似乎都在争论我的教授在回答中所说的话,并引起了一些混乱

答复:1 1000 0100 0110 0011 0000 000 --符号位:1 --固定点:-44.375=25+23+22+2-2+2-3

=101100.011
= 1.01100011 * 25
--指数:5+127=132=1000 0100

--分数:01100011 0000 000

标记:

--1个标记表示正确的符号位 --2个标记用于正确的定点表示 --正确指数的2个标记(二进制) --正确分数的2个标记(用零填充)


除非
浮点
非常小,否则分数没有剩余的“零位”

这里的示例是-1.63(十六进制)*幂(2,5(十进制))。
调整指数,直到前导数字为1

printf("%a\n", -44.375);
// -0x1.63p+5

[编辑]

您的教授希望看到“正确分数的2个标记(用零填充)”是
浮点中的位数,因此示例中的有效位是

1.01100011 0000 000

前导的
1
未显式存储在典型的
浮点中

OP“是什么决定了你将小数点“置零”到基数右边的零数?

答:IEEE 754 binary32(一种流行的
浮点实现)具有24位有效位。前导位(通常为1)和23位小数。因此,您的“右”零填充将填充23位。

要确定IEEE-754 32位二进制浮点值的有效位:

找出前导(最高有效)1位的位置。这是起点。再计算23位。如果有剩余,将其四舍五入到24位中的最后一位(根据需要进行进位)

例外情况:如果前导位小于2-126,则使用2-126位作为起点,即使它为零

这将给出数学有效位。要获取有效位字段的位,请删除第一位。(如果使用了异常,请将编码指数设置为零,而不是正常值。)


另一个例外:如果四舍五入后的前导位为2128或更大,则转换溢出。将结果设置为无穷大。

请提供转换示例以更好地理解您的问题。我建议“指数:5+127=132=1000 0100”最好写为“偏差指数:真指数+偏差=5+127=132=1000 0100”“.进一步”有效位=(1)+分数:(1)+01100011 0000 000”
printf("%a\n", -44.375);
// -0x1.63p+5