一个也有小数部分的数字的十进制到二进制的转换

decimal to binary conversion of a number which is having fractional part too

如何用二进制表示500.2。我想知道转换方法。我知道如何转换没有分数的数字,但如果分数是任何数字,我不知道如何转换它。

这是一个关于它的好网页。我不知道它是否回答了你的问题: http://www.h-schmidt.net/FloatConverter/IEEE754.html

编辑

来自 link

用法:您可以通过在按钮栏中选择其二进制表示来转换数字,其他字段将立即更新。或者您可以在相应的文本字段中输入二进制数、十六进制数或十进制表示形式,然后按 return 更新其他字段。为了更容易发现最终的舍入错误,选定的浮点数在转换为双精度后显示。

特殊值:您可以输入单词"Infinity"、“-Infinity”或"NaN"以获得相应的IEEE-754特殊值。请注意有两种零:+0 和 -0。

转换:IEEE-754 数字的值计算如下: 符号 * 2 指数 * 尾数 符号存储在位 32 中。指数可以通过减去 127 从位 24-31 计算得出。尾数(也称为有效数或小数)存储在位 1-23 中。一个值为 1.0 的不可见前导位(即它实际上没有存储)放在前面,然后第 23 位的值为 1/2,第 22 位的值为 1/4 等。结果,尾数的值介于1.0和2。如果指数达到-127(二进制00000000),则不再使用前导1来启用渐进下溢。

下溢:如果指数具有最小值(全零),则遵循非规范化值的特殊规则。指数值设置为 2-126,而不再使用尾数的 "invisible" 前导位。尾数的范围现在是 [0:1)。

注意:转换器用于将非规范化指数显示为 2-127 和非规范化尾数范围 [0:2)。这实际上与上面的值相同,在指数和尾数之间移动了两倍。然而,这让人们感到困惑,因此被改变了(2015-09-26)。

四舍五入误差: 不是每个十进制数都可以精确地表示为浮点数。这可以在输入“0.1”并检查其二进制表示时看到,该表示稍小或稍大,具体取决于最后一位。

其他表示形式:十六进制表示只是将位串的整数值打印为十六进制。不要将它与 0xab.12ef.

样式的真正十六进制浮点值混淆

引用 Modern Digital Electronics 4E

的转换说明

十进制转二进制:

Any decimal number can be converted into its equivalent binary number. For integers, the conversion is obtained by continuous division by 2 and keeping track of the remainders, while for fractional parts, the conversion is affected by continuous multiplication by 2 and keeping track of the integers generated.

您的转换过程如下图所示:-

500/2 = 250 Remainder = 0
250/2 = 125 Reaminder = 0
125/2 = 62  Remainder = 1
62/2  = 31  Remainder = 0
31/2  = 15  Remainder = 1
15/2  =  7  Remainder = 1
7/2   =  3  Remainder = 1
3/2   =  1  Remainder = 1
1/2   =  0  Remainder = 1

因此,求值顺序是最上面的余数进入 LSB,最底部的余数进入 MSB。

因此,(500)2 = 111110100.

现在,谈论小数部分,我们将按如下方式进行:-

// separate the integer generated(0 or 1) on the left hand side of the fraction/dot,
// and ensure only fractional part between 0 and 1 are allowed in the next step
0.2 * 2 = 0.4 ,  so, keep 0 in the bag
0.4 * 2 = 0.8 ,  so, keep 0 in the bag
0.8 * 2 = 1.6 ,  so, keep 1 in the bag, and next put 0.6 to the next step
0.6 * 2 = 1.2,   so, keep 1 in the bag, and next put 0.2 to the next step
0.2 * 2 = 0.4,   so, keep 0 in the bag...
// and so on as we see that it would continue(repeating) the same pattern.

因为我们发现这个级数会无穷无尽,所以我们可以只考虑到某些小数位的精度。

因此,如果我假设所需的精度是点后的 4 位数字,那么答案就是数字放入包中的顺序,即

(0.2)2 = 0.00110011... = 0.0011.... = 0.0011.

现在,加起来,(500.2)2 = 111110100.0011 .