如何用2的补码表示一个带分数的负数?

24

我想表示数字-12.5. 所以12.5等于:

001100.100
如果我不考虑分数,那么-12就是一个简单的数字。
110100

但是-12.5是什么?它是110100.100吗?我如何计算这个负分数?

3个回答

32

在十进制数系统中,每个数字位置(或列)代表(从右到左读取数字):个位(即10的0次方),十位(即10的1次方),百位(即10的2次方),以此类推。

对于无符号二进制数,基数为2,因此每个位置变为(同样,从右到左读取):1(即2的0次方),2(即2的1次方),4(即2的2次方),以此类推。

例如

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

在有符号二进制补码中,最高有效位(MSB)为负数。因此它表示数字的符号:对于负数为'1',对于正数为'0'。

对于三位数,行将保存这些值:

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

固定点(小数)系统中所持有的位的值不变。列的值遵循与以前相同的模式,基数为(2)的幂,但幂变为负:

2^2 (4), 2^1 (2), 2^0 (1) . 2^-1 (0.5), 2^-2 (0.25), 2^-3 (0.125)

-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


6

所以,您想要用二进制补码表示-12.5

12.5:>> 01100.1

2的补码(01100.1):>>10011.1

通过检查2的补码表示法的加权码属性(最高位权重为负数),验证答案。我们将得到-16 + 3 + .5 = -12.5


5

您可以将数字倍增,直到它成为负整数或达到定义的限制,然后相应地设置小数点。

-25是11100111,所以-12.5是1110011.1。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接