您能否解释以下问题的解决方案? 我不明白我们如何得出这个结论-2 ^(n-1)+ 2 ^(n-1)-1 -x 特别是我很困惑为什么我们需要减去x
您可以通过获取二进制补码方法中的负数表示 一个数字的补码然后加一个。它为什么有效?两个补码表示背后的关键思想是什么? 答案:关键的想法是将符号位视为带负号的值。在n位表示中, 符号位的值为-2 ^ n1。 当你有一个正数x。通过两个补码你想得到-x。 在正数x中,符号位为0.当你取一个数字的补码时,你得到:
-2 ^(n-1)+ 2 ^(n-1)-1 -x
简化后,你得到-x-1。当你为数字添加+1时(如同两个补码:取一个补码并加一个),你得到-x。 这为零提供了唯一的表示。此外,所有的数字计算都是根据2的幂来计算的,与负数的表示不同。
答案 0 :(得分:1)
您提供的解决方案似乎解释了One和Two的恭维不必要地复杂化。简而言之,通过翻转数字的二进制表示中的所有位来获得恭维。让我们说n = 8,x = 13,然后在恭维中
x = 00001101(无符号值13)
-x = 11110010(无符号值242 = 255 - 13)
即。 -x表示为2 ^ n - 1 - x
恭维只是恭维加上1:
-x = 11110011(无符号值243 = 255 - 13 + 1)
即。 -x表示为2 ^ n - x
返回您提供的解决方案:
-2 ^(n-1)= 10000000
2 ^(n-1)-1 = 01111111
-2 ^(n-1)+ 2 ^(n-1)-1 = 11111111
( - 2 ^(n-1)+ 2 ^(n-1)-1) - x翻转x的二进制表示中的所有位,正是One的恭维所做的。 IMO,这种解释非常违反直觉,上面的解释(或来自维基百科)要好得多......
答案 1 :(得分:0)
我不确定我完全理解你的问题。二进制补码是用于使某些事情变得更容易的格式,它仅在您以某种方式限制值(固定位数)时才有效。对于4位字,零的补码为1111,为了得到2的补码,你加1,它将所有位翻转到0000,这很方便。 0001的一个补码是1110,加一个得到1111,当解释为有符号值时为-1。
1's 2's
2 1101 1110
3 1100 1101
4 1011 1100
第一个(MSB)位始终指示值是正还是负。其他值为“正数”(1,2,3,4 ...)为正值,“倒计数”(-1,-2,-3 ...)为负值。
很难用非离散的代数术语来表达这一点,因为我们通常认为它们的“数字”是无限的。