我了解使用二进制补码表示负值的概念,然后可以使用负数来查找结果值。
例如
x = 15
和y = 10
(二进制x = 1111
和y = 1010
)
为了计算x - y
,我们使用二进制补码将y
表示为负值y = 0101 + 0001 = 0110
,然后执行加法运算x + (-y) = 1111 + 0110 = 0101
转换为预期结果5
。
一切都很好,直到我尝试使用相同的方法来计算y - x
,最终导致1011
转换为11
而不是预期的结果-5
。有没有一种方法可以正确地计算两个二进制数相加导致的负值?
答案 0 :(得分:1)
这样想; y - x
等同于-x + y
。因此,我们可以首先取反x
,它是15
(二进制形式的1111
),取反后就变成0001
。然后,我们可以将该值添加到y
(二进制中的10
,1010
)中,得到1011
。因为此值是负数,所以我们将这些位翻转并加1使其为正数,然后得到0101
,即以10为底的5
。这意味着我们的结果是-5
,这是正确的。
我认为您在所有地方都是正确的,除非您声明将其翻译为11
。