问题是找到8位二进制数(-00101.110)的2的补码。
所以我不明白如何处理小数部分。我认为1的补码将是11010.001 11010.010是2的补码吗?这些是我需要的8位作为-00101.110的2s补码的最终答案吗?
答案 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
使用十进制数字系统,我们习惯于使用单位,数十和数百列,使用无符号二进制数,这将成为列数的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