如何在计算机内存中表示有符号整数值?

时间:2016-02-04 08:32:25

标签: assembly binary integer signed twos-complement

我的教授向我们提出这个问题:

var stack_1 = 
       {
          sp: 10,
          stk: new Array(10),

          push: function (v)
          { 
            sp = sp - 1; 
            stk[sp] = v; 
          }
    } 

这样一个问题的答案是否归结为对这个问题的解释,还是有一个一致的答案?

对我来说,这似乎归结为解释,这就是为什么我要问这个问题,看看我在这些方面是对还是错。

这是我的想法:

答案是肯定的237(如果先前执行了2&#39的补充,并且11101101是签名的代表)

OR

答案是否定的19(如果假设11101101未签名,我们需要执行2&#39补充以获得00010011)

我是否正确地指出这样的问题可以归结为它的解释?或者回答这个问题的人是否应该假设已经完成了2的补充? (从而得出积极的答案237)

1 个答案:

答案 0 :(得分:3)

考虑4位;

0   0000    0
1   0001    1
2   0010    2
3   0011    3
4   0100    4
5   0101    5
6   0110    6
7   0111    7

8   1000    -8
9   1001    -7
A   1010    -6
B   1011    -5
C   1100    -4
D   1101    -3
E   1110    -2
F   1111    -1

如果数字是未签名的,那么人们将位模式理解为左列。

如果数字已签名,则人们将位模式理解为右列。

以十进制10 - A 1010 -6为例;

如果签名3 - 6 = -3将如下所示:

(3)     0011 +
(-6)    1010
----    ----
(-3)    1101

如果数字是无符号的,则完全相同的操作看起来像3 + 10 = 13

(3)     0011 +
(A)     1010
----    ----
(D)     1101

请注意,位模式保持不变,我唯一要改变的是人类可读的表示,这取决于数字是有符号还是无符号,即使内部操作相同(即添加)。