无法理解定点表示如何工作?

时间:2017-12-24 08:04:19

标签: floating-point programming-languages

5.5如何以固定点表示

会不会像

a)0000 1011(101.1)

b)55 - > 0011 0111

不能理解定点表示或它们如何工作......如果上面的问题是愚蠢的,我很抱歉...

2 个答案:

答案 0 :(得分:3)

通常,在定点表示中,您有一些位数,比如16,并且您指定一个“小数点”(如小数点,但对于您正在使用的任何基数)处于固定位置。例如,对于8位,我们通常将它们解释为整数,因此这些位:

01010111

表示87.使用固定点,我们可以说小数点位于第五位和第六位之间,就好像它们是:

01010.111

然后这些代表10.875(10⅞或87/8)。

小数点实际上并没有出现在内存中;我们只记得以这种方式解释这些比特。

当您希望使用比使用相同位数的整数更小且更精确的值时,定点非常有用。例如,我们不想使用-128,-127,-126,... -3,-2,-1,0,1,2,3,... 126,127,而是使用-16,-7⅞, - 7¾,...-⅜,-¼,-⅛,0,⅛,¼,⅜,...15¾,15⅞。选择小数点的位置取决于适合您应用需求的内容。

处理器可能有一些指令可帮助您使用定点值,但通常使用简单的整数运算。我们必须记住,如果一个位模式在解释为整数时表示值 x ,那么它实际上是 x / q in定点,其中 q 调整我们放置小数点的位置。 (在小数点后有三位, q 是2 3 = 8.。

当加上或减去数字定点数时,我们可以使用整数算术指令。这是因为 x / q + y / q =( x + < EM>ÿ)/ q 。因此,添加(或减去)我们隐式除以 q 的两个整数会产生与已经除以 q 的整数相同的结果。

但是,当我们使用整数乘法指​​令乘以 x y 时,我们得到的结果就好像小数点位于不同的位置。这是因为 x / q y / q =( x •< EM>ÿ)/ q 2 。因此,当乘以时,我们必须移位以获得正确的答案。例如,请考虑以下两个值:

00001.100 (12/8)
00010.100 (20/8)

这些产物是(12/8)•(20/8)= 240/64 = 30/8 =3¾。如果我们将它们乘以整数乘法,则16位结果为:

00000000 11110000

由于乘法,现在隐含的小数点后面有6位而不是3位,所以这个值是:

00000000 11.110000

为了进行调整,使用定点的软件通常会将位移位以将小数点放回指定位置,然后它可能会丢弃额外的高位。所以我们会:

00000000 00011.110

然后:

00011.110 (3¾)

除了在乘法后移位位以重置小数点之外,软件还可以保留位,记住小数点位于新位置。

在很大程度上,定点算术是使用分数的分子来计算的,其中分母被内置到软件中。 (因此,如果符合你的目的,你甚至可以使用不是2的幂的分母,但这使得在乘法之后重新调整数字更加困难,因为它涉及除法而不是简单的位移。)

答案 1 :(得分:0)

想想一个机械计数器,就像前一段时间在汽油分配器或汽车里程表中使用的那样。每个轮子具有相同数量的符号。当右侧的车轮完成一个完整的旋转时,下一个车轮会跳到下一个符号。

enter image description here

关于小数点应该在哪里的决定仅取决于所需的比例。要将读数从kWh更改为mWh,只需将三个方块涂成红色。机器和计数机制将保持不变,只有我们对符号的解释才会改变。

要生成相同的二进制(或任何其他数字基数),只需要更改轮子中的符号数。如果有一个小数点,它所在的位置只是一个解释问题。

公里或公里,有人吗?

enter image description here