问题描述
我正在准备即将举行的考试,在指南中发现了这个问题:
假设使用8位二进制加法器进行二进制补码二进制数编码,FF和01(十六进制)相加的结果是什么?
选项是(我只能选择一个):
1. 0 (In decimal)
2. 100 (In hexadecimal)
3. Cannot represent result due to bit overflow
4. 256 (in decimal)
我的逻辑告诉我 2 和 4 都是正确的,因为操作会导致添加
1111 1111
0000 0001
---------
1 0000 0000
哪个是十进制的 256 或十六进制的 100,但正确答案是 1。0(十进制),他们是如何得出这个结论的,最后的进位位是完全被忽略了吗?如果是,那为什么不导致溢出?
解决方法
我认为“溢出”通常是根据结果是否有意义来定义的,而不是在过程中是否有一些位碰巧从边缘掉下来。
您将 1 与 -1 相加,结果为 0。一切都在范围内;没有溢出。
如果你把 127 和 1 相加,就会溢出。那应该产生 128,但由于我们处理的是 8 位二进制补码,你将得到 -128。 那会溢出。
题外话:有人可能会争辩说,这个问题提出得不好,因为数字 FF(十进制 255)不能用 8 位二进制补码表示,其中的范围是 -128 到 127(含)。然而,使用十六进制数来显示位模式是很常见的,不管这些位模式实际意味着什么,并且位模式“所有位设置”将意味着 -1。