3

我对此有点迷茫。我需要使用两个小数位 0.(a-1)(a-2)

像那样,现在我可以使用.00 .01 .10and.11 但我也需要负数(在 2 的补码中),所以会.10-.5吗?还是会-.25?与 相同.11,那会是-.75什么?还是会-.5?我很确定在这两种情况下都是前者,但我并不完全肯定。

4

3 回答 3

5

在二进制补码表示法中,负数的所有最高有效位都设置为 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
于 2012-03-30T15:51:25.820 回答
1

这样看:

你有正常的二进制表示

让我们假设 8 位字...

第一位 (MSB) 的值为 128,第二位为 64,依此类推...

换句话说,第一位 (MSB) 是 2^7 ... 第二位是 2^6 ... 最后一位是 2^0

现在我们可以假设我们的 8 位字有 2 个小数位......

我们现在从第一位 (MSB) 2^5 开始,以最后一位蜜蜂 2^-2 结束

这里没有魔法......

现在把它变成二进制补码:简单地否定第一位的值

所以不是 2^5 而是 -2^5

所以基数 10 -0.75 将是二进制补码
111111.01 ...
(1*(-32) + 1*16 + 1*8 + 1*4 + 1*2 +1*1 + 0*0.5 + 1*0.25)
(1*(-2^5) + 1*2^4 + 1*2^3 + 1*2^2 + 1*2^1 +1*2^0 + 0*2^(-1) + 1 *2^(-2))

于 2012-03-30T16:09:24.387 回答
0

存储在二进制补码中的数字反转最高位大小的符号(例如,对于 16 位数字,最高位是 -32768 而不是 +32768)。所有其他位的行为正常。因此,在对多字数进行数学运算时,应将每个数的高位字视为二进制补码(因为其最高位将是整个数的最高位),但应将每个数中的所有其他字视为作为无符号数量。

例如,16 位二进制补码数具有位值(-32768、16384、8192、4096、2048、1024、512、256、128、64、32、16、8、4、2 和 1)。分成两个 8 位部分,这些部分将具有位值(-32768、16384、8192、4096、2048、1024、512 和 256);和(128、64、32、16、8、4、2 和 1)。第一组值是二进制补码 8 位数,乘以 256;后一组是一个无符号的 8 位数字。

于 2012-03-30T15:49:14.577 回答