具有小数部分的数字的十进制到二进制转换

时间:2015-11-22 17:51:23

标签: math binary numbers decimal data-conversion

如何在二进制数系统中表示500.2。我想知道转换方法。我知道如何在没有积分的情况下转换数字,但如果点数有任何数字,我就不知道如何转换它。

2 个答案:

答案 0 :(得分:2)

Modern Digital Electronics 4E

引用转化说明

十进制到二进制转换:

  

任何十进制数都可以转换为等效的二进制数。    对于整数 转换是通过连续除2获得的   并跟踪剩余的,而 的小数部分   转换受连续乘2和保持的影响   跟踪生成的整数

您的案例中的转换过程如下所示: -

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。

答案 1 :(得分:0)

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

修改

来自该链接

enter image description here

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

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

转化:IEEE-754号码的值计算如下: sign * 2exponent *尾数 符号存储在比特32中。可以通过减去127从比特24-31计算指数。尾数(也称为有效数或分数)存储在比特1-23中。将值1.0的不可见前导位(即,实际上未存储)放在前面,然后位23的值为1/2,位22的值为1/4等。结果,尾数之间的值为1.0和2.如果指数达到-127(二进制00000000),则前导1不再用于启用逐渐下溢。

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

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

舍入错误:并非每个十进制数都可以完全表示为浮点数。这可以在输入" 0.1"并检查其二进制表示,该表示略小或稍大,具体取决于最后一位。

其他表示形式:十六进制表示只是打印为十六进制的bitstring的整数值。不要将它与0xab.12ef样式的真正十六进制浮点值混淆。