Math 添加负二进制和正二进制?

Math 添加负二进制和正二进制?,math,binary,Math,Binary,X=01001和Y=10101010 如果我想把它们加在一起,我该怎么做?它们是“二者的补充”。。。 我尝试了很多方法,但我不太确定我是否得到了正确的答案,因为似乎有不同类型的规则。 只想确保它是正确的: 1.按原样添加,不要转换负片 2.将得到的负数转换为和。 f、 eks 01001001+10101010=11110011=>000011100=>1101=>-13 还是 1.转换负片 2.将它们相加并转换负片 f、 eks 01001001+10101010=>01001001

X=01001和Y=10101010

如果我想把它们加在一起,我该怎么做?它们是“二者的补充”。。。 我尝试了很多方法,但我不太确定我是否得到了正确的答案,因为似乎有不同类型的规则。

只想确保它是正确的:
1.按原样添加,不要转换负片
2.将得到的负数转换为和。

f、 eks
01001001+10101010=11110011=>000011100=>1101=>-13

还是
1.转换负片
2.将它们相加并转换负片

f、 eks
01001001+10101010=>01001001+01010110=>10011111=>0110001=>-97


所以基本上我想做的是:X-Y和X+Y
有人能告诉我怎么做吗?

一些资源站点:

当两个参数的符号相反时,添加2的补码不需要任何特殊处理。您只需像通常在二进制中那样添加它们,结果的符号就是您保留的符号。

二的补码的美妙之处在于,在二进制级别,它是一个解释问题,而不是算法问题——添加两个有符号数的硬件与无符号数的硬件相同(忽略标志位)

您的第一个示例——“只需添加它们”——正是正确的答案。您的示例编号

  • 01001=73
  • 10101010=-86
因此,正确答案确实是-13

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


请注意,有趣的是溢出/下溢位的处理。您不能将73-(-86)的结果表示为8位2的补码数…

为了确保您理解2的补码,将正数转换为负数(或反之亦然):将每个位反转,然后在结果中添加1

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


要从X中减去Y,请将Y取反并相加。例如01001001+01010110。

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

如果无符号整数的MSB已为0,则可以将其读取为有符号,并获得相同的结果。
如果MSB为1,则可以在左侧附加0以获得有符号的数字。您应该对所有带符号的数字进行扩展签名(即,如果MSB为0,则添加0;如果MSB为1,则添加1),以获得相同宽度的数字,这样您就可以“正常”执行算术

例如,使用您的号码:

X=01001:未签名,MSB为0,不执行任何操作

Y=10101010:已签名,未对X执行任何操作,仍然未执行任何操作

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

X=11001001:未签名,MSB为1,添加一个0-->011001001

Y=10101010:有符号,扩展X,所以有符号扩展Y-->110101010


现在你有了两个有符号的数字,你可以按照你已经知道的方式进行加法或减法。

但是减法是否与加法相同呢?那么我不会得到同样的答案吗?无符号数的减法和有符号数的减法是一样的。啊,所以我在最后遵循相同的减法和转换规则,就像我在加法部分所做的一样:)最后不需要“转换”。你得到的值“11110011”只是“是”-13。减法与加法不同,它是;It’这和其他数字的缩写相同,只需将底部的每个数字(每个位)从顶部对应的位中减去,如果你想从0中减去1,则从该位向左旋转。。。与十进制减法相同,有重新标记能力的人应该将其标记为“家庭作业”