X= 01001001和Y= 10101010
如果我想把它们加在一起,我该怎么做呢?他们是“二的互补”..。我尝试了很多方法,但我不太确定我是否得到了正确的答案,因为似乎有不同类型的规则。
我只想确保它是正确的:
将它们按原样相加,不要将negative
f.eks
01001001+10101010 = 11110011 => 00001100 => 1101 => -13
或?
f.eks
01001001+10101010 => 01001001 + 01010110 => 10011111 => 01100001 => -97
所以基本上我想做的是: X-Y和X+Y
有人能告诉我怎么做吗?
一些资源站点:student-binary celtickane swarthmore
发布于 2008-12-06 21:28:31
二的补码的美妙之处在于,在二进制级别上,它是一个解释问题,而不是算法--用于将两个有符号数相加的硬件与用于无符号数的硬件相同(忽略标志位)。
你的第一个例子--“只需添加它们”--就是正确的答案。您的示例数字
因此,正确答案确实是-13。
减法也是一样的,因为不需要对二的补码数进行特殊处理:你只需要“减去它们”。
注意,有趣的是对溢出/下溢比特的处理。您不能将73 - (-86)的结果表示为8位二进制补码数...
发布于 2008-12-06 21:28:01
当两个参数的符号相反时,添加二的补码不需要任何特殊处理。您只需像通常的二进制代码一样将它们相加,结果的符号就是您保留的符号。
发布于 2008-12-06 22:23:21
为了确保您理解2的补码,将正数转换为负数(或反之亦然):反转每一位,然后将结果加1。
例如,正数X= 01001001变成了负数10110101+1=10110110;负数Y= 10101010变成了正数01010101+1=01010110。
若要从X中减去Y,请对Y求反,然后将其相加。即01001001 + 01010110。
https://stackoverflow.com/questions/346774
复制相似问题