2

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

如果 HO 位为零,则该数字为正数并存储为标准二进制值。如果 HO 位为 1,则该数为负数并以二进制补码形式存储。要将正数转换为其负数、二进制补码形式,请使用以下算法:

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

  2. 将反转结果加一。

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

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

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

4

2 回答 2

4

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

于 2010-10-11T16:39:27.340 回答
2

计算机不区分这两者——由你决定使用适当的指令。

例如,在 x86 上,对无符号数使用JA(jump if Above) 和JB(jump if below),对有符号数使用JG(jump if greater) 和JL(jump if less)。同样,您可以使用IMULandIDIV来乘/除有符号数,MULandDIV用于无符号数。

于 2010-10-11T17:22:02.577 回答