我正在阅读汇编语言艺术这本书。我在那里看到了这一段。
如果H.O. bit为零,则数字为正数并存储为a 标准二进制值。如果H.O. bit是1,那么数字是 否定并存储在两个补充形式中。转换一个 正数为负数,二进制形式,你用的是 以下算法:
反转数字中的所有位,即应用逻辑
NOT
函数。- 醇>
在倒置结果中添加一个。
例如,要计算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
?
答案 0 :(得分:4)
当您以8位表示有符号数时,第8位(HO位)是符号位。因此,您只能使用7位来存储数字的值。 8位有符号数的范围是-128..127。除非您使用超过8位,否则无法表示251。
答案 1 :(得分:2)
计算机不区分这两者 - 您可以使用适当的说明。
例如,在x86上,您使用JA
(如果在上方跳转)和JB
(如果在下面跳转)用于无符号数和JG
(如果更大则跳转)和{{对于带符号的数字,1}}(如果小于,则跳转)。同样,您使用JL
和IMUL
来对有符号数进行乘法/除法,并使用IDIV
和MUL
来表示无符号数。