分数的2的补码表示?

时间:2012-03-30 15:39:34

标签: math binary representation

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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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))

答案 2 :(得分: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)。第一组值是2的补码8位数,乘以256;后一组是无符号的8位数。