一个也有小数部分的数字的十进制到二进制的转换
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 .
如何用二进制表示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 .