问题是要找到8位二进制数的二进制补码(-00101.110)。带分数的二进制数的二进制补码
所以我不明白如何处理小数部分。我认为1的补码是11010.001 是11010.010的2的补码吗?这些是我需要的8位数作为我对-00101.110的二进制补码的最终答案吗?
问题是要找到8位二进制数的二进制补码(-00101.110)。带分数的二进制数的二进制补码
所以我不明白如何处理小数部分。我认为1的补码是11010.001 是11010.010的2的补码吗?这些是我需要的8位数作为我对-00101.110的二进制补码的最终答案吗?
在二进制补码表示法中,负数的所有最高有效位都设置为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
用十进制数字系统,我们使用具有单位,十位和百列,无符号二进制数这成为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
能否请您参考http://cs.iupui.edu/~aharris/230/twosCompFloat.html –
我还是不太明白这一点。我的书中有一个例子,它表示分数0.01(基数2)有1.10(基数2)的补数和1.11(基数2)的2的补数。所以我就这样解决了我的问题。 – user1869703