我有一个Patterson的计算机组织书中的问题。
这里他们给出了两个数字A和B,它们是8位有符号整数。 A和B的值分别为216和255。他们要求找到A + B和A - B并报告是否有溢出/下溢。
现在我的疑问是 - 你甚至不能用8位有符号数表示216。范围是[-128,127]。所以这个问题无效!!
如果有人确认我的疑问,我将非常感激。
感谢。
答案 0 :(得分:0)
这个问题根本不是无效的。实际上,这种类型的问题非常常见,以确保您了解溢出/下溢只是包围位表示,例如当里程表变得过高时,里程表会翻到全零。由于我是计算机科学系的教师,我也会尝试在没有直接回答Patterson问题的情况下提供帮助。
你本能地认为216在签名的8位数字中无法表示是正确的,但让我们来看看这些事情是如何运作的。
假设你有一个签名的4位机器,需要存储数字-11。您可能很聪明并注意到有符号4位数的范围是[-8,7],因此-11必须是不可能的。不是这样......首先,存储11 ...一般是0000 ... 0000001011_2,但我们必须将其压缩为4位,除了低位4位之外都会丢失。所以11 = 1011_2。此时你可能会说,“但这不是一个负数吗?”好吧,如果你有马,请等一下。现在否定4位11得到4位-11 ... 2s补偿否定需要翻转所有位并加1,所以-1011_2 = 0100_2 + 1 = 0101_2。
好的,你现在可以停止抱马了。 是真的,0101_2实际上是+5,但它可能也和-11一样好吗?还记得你的早期算术日,当你的老师告诉你检查你的结果吗?...我们可以在这里做同样的感觉所有的温暖和舒适约+5与-11相同。例如-11 + 6 = -5,对吗?因此,如果我们将6添加到0101_2并获得-5,我们应该对我们看似超出范围-11感到满意,对吗?当然! :-)所以让我们看看... 6 = 0110_2 4位,现在让我们添加。
0101
+ 0110
------
1011
那么1011_2是什么?这是消极的;我们可以判断,因为符号位(最左边的位)是1.要找到它的大小,我们可以将它否定它... -1011_2 = 0100_2 + 1 = 0101_2,令我们惊讶的是5,所以原始结果,1011_2是-5,这是人们应该预料到的答案。
也许我们不相信这是好的。让我们通过添加14验证-11是0101_2。这应该给我们3的结果因为-11 + 14 = 3.呃哦... 14似乎也超出范围,但让我们像机器一样工作然后做什么我们被告知,无论它看起来多么愚蠢。 +14一般是0000 ... 0001110_2,但是我们必须通过丢失除低位4位之外的所有内容将其压缩为4位。因此,带符号4位的+14是1110_2。我们将其添加到-11 ...
0101 // -11
+ 1110 // +14
------
10011 ...but this also needs to get squeezed into 4 bits, so it's 0011
嘿,与0011相同的不是+2?它是!因此,看起来您实际上可以存储显示在明显范围之外的数字,并且它们仍然可以准确地用于至少一些数学。
所以希望这能让您了解如何以签名的8位格式存储255和216,而无需担心。但是我会给你检测溢出/下溢:-P
祝你好运。