带分数的二进制的二进制补码

时间:2014-01-22 04:49:20

标签: twos-complement

问题是找到8位二进制数(-00101.110)的2的补码。

所以我不明白如何处理小数部分。我认为1的补码将是11010.001 11010.010是2的补码吗?这些是我需要的8位作为-00101.110的2s补码的最终答案吗?

1 个答案:

答案 0 :(得分:0)

在二进制补码表示法中,负数的所有最高有效位都设置为1.假设您将这些数字存储为8位,“二进制点”右侧为2。

根据定义,x + -x = 0,我们可以写:

0.5  +  -0.5 = 0.10 + 111111.10 = 0   // -0.5  = 111111.10
0.25 + -0.25 = 0.01 + 111111.11 = 0   // -0.25 = 111111.11
0.75 + -0.75 = 0.11 + 111111.01 = 0   // -0.75 = 111111.01

等等。

使用这样的8位,您可以存储的最大数字是

011111.11 = 31.75

最不正数是

000000.01 = 0.25

最小负数是

111111.11 = -0.25

和最小的(即最负面的)是

100000.00 = -32

Source

使用十进制数字系统,我们习惯于使用单位,数十和数百列,使用无符号二进制数,这将成为列数的1,2,4等2。

例如

2^0 (1), 2^1 (2), 2^2 (4).

在二进制补码中,最高有效位(MSB)变为负数。对于三位数,行将保存这些值;

-4, 2, 1
 0  0  1 => 1
 1  0  0 => -4
 1  0  1 => -4 + 1 = -3

因此定点系统保持的位值不变。

-1始终为111.000

-0.5加0.5:111.100

在您的情况下,110100.10等于-32 + 16 + 4 + 0.5 = -11.5。你做的是创建-12然后添加0.5而不是减去0.5。

你真正想要的是-32 + 16 + 2 + 1 + 0.5 = -12.5 = 110011.1