【发布时间】:2017-02-07 01:35:45
【问题描述】:
所以,我是汇编编程的新手,以及负数的“二进制补码”表示的概念,我有点困惑。
在我正在阅读的关于汇编主题的书中(以及我查阅过的所有在线资源)中,解释说您可以通过查看数字的最高位来判断数字是否为负;如果该位为 1,则为负(有符号),否则为正(无符号)。然而,这对我来说没有意义。
为了说明我的困惑,想象一下 255 的无符号表示:11111111
这是一个正的无符号值,但它的最高有效位已设置。根据我一直在阅读的二进制补码规则,这应该使这个数字成为负数而不是正数,但是可能会有像这样的无符号值并设置最高有效位(如果你不能这样做,一个无符号的8 位整数只能表示数字 0-127)。那么这是如何工作的呢?我如何判断一个数字是有符号的还是简单地无符号的并设置了最高有效位?而且,可能更重要的是,计算机如何区分?我只是错过了什么吗?
【问题讨论】:
-
请注意带符号的数字与无符号的数学如何更有意义,如果您有 255 个 8 位,并且您尝试将其递增(加 1),它将溢出 8 位并最终为零(
256=1 0000 0000=> 9 位)。这很好地证明了 8 位限制为 255。但是您可以在“签名”模式下查看与 -1 + 1 = 0 相同的操作。并且以类似的方式打破有符号限制:127 + 1 = -128 (0111 1111+ 1 =1000 0000) ->在“无符号”视图中是有意义的,因为它是 127 + 1 = 128。因此 CPU 对“有符号”和“无符号”数字执行相同的加/减操作。
标签: assembly binary twos-complement