22

所以我想代表数字-12.5。所以 12.5 等于:

001100.100

如果我不计算分数,那么很简单,-12就是:

110100

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

4

3 回答 3

27

对于十进制数系统,每个数字位置(或列)表示(从右到左读取一个数字):个位(即 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

于 2013-03-20T16:11:12.593 回答
5

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

-25 是 11100111,所以 -12.5 是 1110011.1

于 2013-03-17T17:17:59.630 回答
4

所以;你想用 2 的补码表示 -12.5

12.5:->> 01100.1

(01100.1) 的 2 补码:->>10011.1

通过检查 2 的补码表示的加权代码属性来验证 ans(MSB 权重为 -ve)。我们将得到 -16+3+.5=-12.5

于 2016-09-12T09:13:06.437 回答