如何存储号码> 128个有符号的一个字节整数?

时间:2010-10-11 16:34:37

标签: assembly binary numbers twos-complement signed-integer

我正在阅读汇编语言艺术这本书。我在那里看到了这一段。

  

如果H.O. bit为零,则数字为正数并存储为a    标准二进制值。如果H.O. bit是1,那么数字是    否定并存储在两个补充形式中。转换一个    正数为负数,二进制形式,你用的是    以下算法:

     
      
  1. 反转数字中的所有位,即应用逻辑NOT函数。

  2.   
  3. 在倒置结果中添加一个。

         

    例如,要计算8位等效的-5

    0000 0101  Five (in binary)   
    1111 1010  Invert all the bits.   
    1111 1011  Add one to obtain result.
    
  4.   

在这里,我想知道0000 0101的小数是否为5,而1111 1011是-5,那么我们如何表示2511111 1011不一样吗?计算机如何区分-5和251

2 个答案:

答案 0 :(得分:4)

当您以8位表示有符号数时,第8位(HO位)是符号位。因此,您只能使用7位来存储数字的值。 8位有符号数的范围是-128..127。除非您使用超过8位,否则无法表示251。

答案 1 :(得分:2)

计算机不区分这两者 - 您可以使用适当的说明。

例如,在x86上,您使用JA(如果在上方跳转)和JB(如果在下面跳转)用于无符号数和JG(如果更大则跳转)和{{对于带符号的数字,1}}(如果小于,则跳转)。同样,您使用JLIMUL来对有符号数进行乘法/除法,并使用IDIVMUL来表示无符号数。