2014-01-22 101 views
1

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

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

回答

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

+0

能否请您参考http://cs.iupui.edu/~aharris/230/twosCompFloat.html –

+0

我还是不太明白这一点。我的书中有一个例子,它表示分数0.01(基数2)有1.10(基数2)的补数和1.11(基数2)的2的补数。所以我就这样解决了我的问题。 – user1869703