如何在二进制数系统中表示500.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
来自该链接
用法:您可以通过在按钮栏中选择其二进制表示来转换数字,其他字段将立即更新。或者,您可以在相应的文本字段中输入二进制数,十六进制数或十进制表示,然后按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样式的真正十六进制浮点值混淆。