首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >添加负和正的二进制?

添加负和正的二进制?
EN

Stack Overflow用户
提问于 2008-12-07 05:11:38
回答 4查看 15.8K关注 0票数 5

X= 01001001和Y= 10101010

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

我只想确保它是正确的:

将它们按原样相加,不要将negative

  • Convert转换为负数,这就是

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-12-06 21:28:31

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

你的第一个例子--“只需添加它们”--就是正确的答案。您的示例数字

  • 01001001 = 73
  • 10101010 = -86

因此,正确答案确实是-13。

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

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

票数 14
EN

Stack Overflow用户

发布于 2008-12-06 21:28:01

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

票数 1
EN

Stack Overflow用户

发布于 2008-12-06 22:23:21

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

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

若要从X中减去Y,请对Y求反,然后将其相加。即01001001 + 01010110。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/346774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档