在二进制表示法中,小数点后面数字的含义是什么?

我有这个例子,如何从一个基地10号码转换为IEEE 754浮点表示

Number: 45.25 (base 10) = 101101.01 (base 2) Sign: 0 Normalized form N = 1.0110101 * 2^5 Exponent esp = 5 E = 5 + 127 = 132 (base 10) = 10000100 (base 2) IEEE 754: 0 10000100 01101010000000000000000 

除了一段话,这对我来说是有意义的:

 45.25 (base 10) = 101101.01 (base 2) 

45是101101在二进制,这没关系,但他们是如何获得0.25为0.01?

您可以通过反复乘以新的基数(在这种情况下,新的基数是2)将小数点后的部分转换为另一个基数,如下所示:

 0.25 * 2 = 0.5 

– >第一个二进制数字是0(取整数部分,即小数点前的部分)。

继续乘以小数点后的部分:

 0.5 * 2 = 1.0 

– >第二个二进制数字是1(再次取整数部分)。

这也是我们停止的地方,因为小数点后面的部分现在是零,所以没有什么可以相乘的了。

因此小数部分的最终二进制表示为:0.01 2

编辑:

值得注意的是,即使以10为底的小数部分开始,二进制表示也是无限的。例如:将0.2 10转换为二进制:

 0.2 * 2 = 0.4 -> 0 0.4 * 2 = 0.8 -> 0 0.8 * 2 = 1.6 -> 1 0.6 * 2 = 1.2 -> 1 0.2 * 2 = ... 

所以我们结束了:0.001100110011 … 2

如果二进制表示最终是无限的,那么使用这种方法很容易看到。

简单的地方价值。 在基地10,你有这些地方:

… 10 3 10 2 10 1 10 0 10 -1 10 -2 10 -3

…数千,数百,数十个。 十分之一,百分之一,千分之一…

同样,在二进制(基2)你有:

… 2 3 2 2 2 1 2 0 2 -1 2 -2 2 -3

四分之一,二分之一 一半,宿舍,八分之一…

所以之后的第二个地方. 在二进制中的单位是2 -2 ,众所周知的单位是1/4(或者是0.25)。

考虑到它们以完全相同的方式工作,“小数”(小数位)在其他基数中是令人惊讶的不直观的。

 base 10 scinot 10e2 10e1 10e0 10e-1 10e-2 10e-3 weight 100.0 10.0 1.0 0.1 0.01 0.001 value 0 4 5 .2 5 0 base 2 scinot 2e6 2e5 2e4 2e3 2e2 2e1 2e0 2e-1 2e-2 2e-3 weight 64 32 16 8 4 2 1 .5 .25 .125 value 0 1 0 1 1 0 1 .0 1 0 

如果我们从45.25开始,那比32更大,所以我们添加一个二进制数1,然后减去32。
我们剩下13.25,这比16小,所以我们添加一个二进制0。
我们剩下13.25,这比8大,所以我们加一个二进制1,然后减去8。
我们剩下的是05.25,它大于/等于4,所以我们添加一个二进制1,然后减去4。
我们剩下的是01.25,小于2,所以我们添加一个二进制0。
我们剩下的是01.25,这比1大,所以我们加一个二进制数1,然后减1。
用整数,我们剩下零,所以我们停下来。 但:
我们留下了00.25,这比0.5小,所以我们添加一个二进制0。
我们留下了00.25,这是大于/等于0.25,所以我们添加一个二进制1,并减去0.25。
现在我们有零,所以我们停止(或不,你可以继续下去,如果你想要永远计算零)

请注意,并非所有小数点的“简单”数字总是达到零停止点。 0.1(十进制)转换为基数2,是无限重复的:0.0001100110011001100110011 …但是,二进制中的所有“简单”数字总是可以很好地转换为基数10。

你也可以用小数(2.5),无理数(pi)或甚至虚数(2i)的基数来做同样的处理,除了基数不能在-1和1之间(包括-1和1)。

2.000 10 = 2 +1 = 10.000 2
1.000 10 = 2 +0 = 01.000 2
0.500 10 = 2 -1 = 00.100 2
0.250 10 = 2 -2 = 00.010 2
0.125 10 = 2 -3 = 00.001 2

分数基数2是.1 = 1 / 2,0.01 = 1/4。 …

想想这样

(点)2 ^ -1 2 ^ -2 2 ^ -3等

所以

。 0/2 + 1/4 + 0/8 + 0/16等

请参阅http://floating-point-gui.de/formats/binary/

你可以把0.25看作1/4。

(以2为底)将小数点左移一位,同样以10除(10位)移动小数点左移一位。 一般除以M(M为底数)小数点左移一位。

所以

 base 10 base 2 -------------------------------------- 1 => 1 1/2 = 0.5 => 0.1 0.5/2 = 1/4 = 0.25 => 0.01 0.25/2 = 1/8 = 0.125 => 0.001 . . . 

等等