添加负二元和正二元?

时间:2008-12-06 21:11:38

标签: math binary

X = 01001001,Y = 10101010

如果我想将它们添加到一起,我该怎么做?他们是“两个补充”...... 我尝试了很多东西但是我不太确定我得到了正确的答案,因为似乎有不同类型的规则。

只是想确保它是正确的:
 1.添加它们,因为它们不会转换负数  2.转换你得到的负数,这就是总和
f.eks
01001001 + 10101010 = 11110011 => 00001100 => 1101 => -13

要么?
 1.转换否定
 2.将它们加在一起并转换为负数
f.eks
01001001 + 10101010 => 01001001 + 01010110 => 10011111 => 01100001 => -97


基本上我想做的是采取:X-Y和X + Y
有人可以告诉我该怎么做吗?
一些资源网站: student-binary celtickane swarthmore

4 个答案:

答案 0 :(得分:12)

两个补码的优点在于,在二进制级别,它是解释而不是算法 - 添加两个有符号数的硬件与无符号数相同(忽略标志位)。

你的第一个例子 - “只是添加它们” - 这是正确的答案。您的示例号码

  • 01001001 = 73
  • 10101010 = -86

所以,正确的答案确实是-13。

减法是一样的,因为两个补码数不需要特殊处理:你“只是减去它们”。

请注意,事情变得有趣的是溢出/下溢位的处理。您不能将73 - ( - 86)的结果表示为8位二进制补码数...

答案 1 :(得分:1)

当两个参数的符号相反时,添加二进制补码不需要任何特殊处理。你只需像往常一样以二进制形式添加它们,结果的符号就是你保留的符号。

答案 2 :(得分:1)

只是为了确保你理解两个补码,从正数转换为负数(反之亦然):反转每个位,然后在结果中加1。

例如,您的正数X = 01001001为负数,变为10110101 + 1 = 10110110;您的负数Y = 10101010变为01010101 + 1 = 01010110为正数。

要从X中减去Y,否定Y并添加。 I.E. 01001001 + 01010110。

答案 3 :(得分:1)

您的困惑可能是因为涉及的数字的宽度。为了更好地了解这一点,您可以尝试使用无符号整数创建有符号整数。

如果无符号整数的MSB已经为0,那么您可以将其读作签名并获得相同的结果。
如果MSB为1,则可以向左追加0以获得带符号的数字。您应该签名扩展(即,如果MSB为0则添加0,如果MSB为1则添加1)所有带符号的数字以获得相同宽度的数字,因此您可以“正常”执行算术。

例如,使用您的号码:

X = 01001001:无符号,MSB为0,什么都不做。

Y = 10101010:已签名,对X没有任何作用,仍然无所作为。

但是如果我们将X的MSB改为1:

X = 11001001:无符号,MSB为1,添加0 - > 011001001

Y = 10101010:有符号,扩展X,因此符号扩展Y - > 110101010

现在您有两个已签名的号码,您可以添加或减去您已知的方式。