我正在尝试解决: 1111 - 10010 (二进制)
我想用两个人的赞美来解决这个问题。我知道答案将是否定的,但我不知道如何得到它。我试着在第一个数字(01111)前加一个0,使数字等于1和0。另外,我怎么知道答案是否定的?
01101
+ 00001
____________
01110 <-- two's compliment
01110
+01111
________
11101 //this isn't right
发布于 2012-03-01 09:12:10
我认为解决这个问题的最简单的方法是把它分成几个小步骤。
我的第一个假设是您正在尝试解决15 (1111 (二进制))- 18 (10010 (二进制))
我发现在二的补码中做减法的最简单的方法是通过method of complements,这不是试图从正15 ( +15 - (+ 18 ) )中减去正18,而是将负18加到正15 ( +15 + (-18) )。这有相同的结果,但在二的赞美中更容易做到(注意:如果你的数字系统没有负数,你就不能这样做)
所以我们必须乘坐15号和-18号车和convert them into two's complement numbers。因为18是用5位的二进制表示的,所以我们需要使用至少6个6位来表示二进制补码中的-18。
为了将-18转换为2的补码,我们在2的补码中取18进行010010翻转这些位(将0转换为1,1转换为0) 101101,然后使用binary addition将1添加到翻转的位
1 (carried digits)
101101 (-19 (flipped 18 ))
+ 000001 (1)
_________
101110 (-18)
为了将15转换为2的补码,我们将15转换为二进制(1111),然后在左侧添加0,直到它具有与-18 (101110) 001111相同的位数
现在我们两个数字都在二的补码中,我们可以使用binary addition将它们相加
111 (carried digits)
001111 (15)
+ 101110 (-18)
_________
111101 (-3)
这给了我们两个补语中的-3,这是正确的答案(15 - 18 = -3)。
通过查看twos complement wiki page,您可以了解2的补码
https://stackoverflow.com/questions/9508629
复制相似问题