首页 文章

两个补码; 0FFFh为正,0FFFFh为负?

提问于
浏览
0

从书,装配艺术,我复制这句话:

在二元补语系统中,H.O . 一个数字位是一个符号位 . 如果H.O.位为零,数字为正;如果H.O.位是1,数字是负数 . 示例:对于16位数字:8000h是负数,因为H.O.比特就是一个 . 100h是正的,因为H.O.位为零 . 7FFFh是积极的 . 0FFFFh为负数 . 0FFFh为正 .

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

4 回答

  • 1

    0FFFFH上前导0的原因是给assember /编译器一个提示,即F是数字的一部分 . 并非所有装配商都需要这样 .

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

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

  • 2

    文字说: 16-bit 数字 . 所以你需要从右边看第16位 . 在0FFFF中,这将是1.对于前导零,它的符号提示该值是数字,而不是单词(即不是变量) .

    如果 Build 有效数字只能以数字开头的约定,则解析器(包括汇编程序)可以更轻松地解析数字文字 . 一些人也是如此 . 你知道DEADBEEF是一个有效的十六进制数 .

  • 0

    你能解释为什么0FFFF有5位数吗?它和FFFF是一样的吗?

    它不一样 . 简单的FFFFh将被汇编程序解释为符号 . 并且您将收到编译错误,因为它找不到任何名为"FFFFh"的符号 . 在它前面放置一个0可确保汇编程序将其解释为数字 .

  • 1

    如果数字应为16位,则将第16位作为符号位 . 在第一,

    0FFFFh

    第16位是1

    0000 1111 1111 1111 1111

    在第二个例子中,

    0FFFh

    第16位是0

    0000 1111 1111 1111

    第16位为0,虽然有16位以上,但二进制只考虑前16位 . 所以,第一个是负面的,第二个是正面的

相关问题