二进制补码;0FFFFh 正,0FFFFh 负?

mag*_*age 2 binary x86 twos-complement

我从《装配艺术》一书中复制了这句话:

\n
\n

在二\xe2\x80\x99补码系统中,数字的HO位是符号位。如果HO位为零,则该数为正;如果 HO 位为 1,则该数字为负数。例子:

\n

对于 16 位数字:

\n

8000h为负,因为 HO 位为 1。

\n

100h为正,因为 HO 位为零。

\n

7FFFh是积极的。

\n

0FFFFh是负数。

\n

0FFFh是积极的。

\n
\n

我不明白最后两个例子。如果将这两个示例转换为二进制,则会得到0000 1111 1111 1111 1111第一个和0000 1111 1111 1111第二个示例。为什么前者是负数,后者是正数?在我看来,两者的最高位都是 0,因此两者都应该是正数。

\n

jse*_*ano 5

0FFFFH 上前导 0 的原因是为了向汇编器/编译器提示 F 是数字的一部分。并非所有汇编器都需要这个。

所以负数实际上是FFFFh,所以1111 1111 1111 1111,那么就是负数。

Computer-programming-forum.com/46-asm/1b99282efbac3bcf.htm