使用6-bit
二进制补码算法,在任何这些情况下都会发生溢出吗?我相信有一个问题b
,但没有溢出。
(a) 11001 + 01000
(b) 10111 – 00110
(c) 00111 + 01100
(d) 10110 + 00011
我说b
是进位而非溢出的一个例子的原因是因为结果与添加的两个数字的符号相同,即使有进位也是如此。
答案 0 :(得分:1)
另外,结果可能大于字大小 正在使用。这种情况称为溢出。
在我们的例子中,我们使用的是6位算术,因此我们可以将-32(100000
)中的数字表示为+ 31(011111
)。
如果两个补码中加了两个数,一个是正数而另一个是负数,则永远不会有溢出。结果将是操作数范围内的数字。
因此,根据您的书,我们有溢出规则,第314页。
如果添加了两个数字,并且它们都是正数或两者都是负数,那么当且仅当结果符号相反时才会发生溢出。
让我们看看所有项目:
(a) carry-out but no overflow
111001 -7
+ 001000 +8
------ --
1000001 +1
(b) carry-out but no overflow
110111 -9
+ 111000 -6
------ ---
1101111 -17
这里我们必须首先使用减法规则,第315页。
要从另一个数字(减数)中减去一个数字(减数),取减数的二进制补码(否定)并将其添加到减数中。
(c) no carry-out, no overflow
000111 +7
+ 001100 +12
------ ---
010011 +19
(d) no carry-out, no overflow
110110 -10
+ 000011 +3
------ ---
111001 -7
请注意,在(a)
和(b)
中,超出单词末尾的进位位被忽略。