3

有一个有趣的事实:

数字 N 的 2 的补码等于数字 N 的 1 的补码减去 1。

2's(N) = 1's(N-1)

下面的结果是显而易见的。

2's(N) = 1's(N) + 1

如何在第二个结果的帮助下证明第一个结果?

4

1 回答 1

1

2 的补码和 1 的补码都以一种 CPU 易于处理的方式将一个负数区域映射到一个正数区域。

在 8 位数字的情况下,1 的补码映射 -127..-0 到 128..255,另一方面,2 的补码映射 -128..-1 到 128..255。

您可以再次执行 1 的补码和 2 的补码,因此重复应用 1 的补码和 2 的补码只会让您回到同一个地方。(因此,我们不必担心正数。)

如果您查看提供的范围,从 128 到 255 的每个数字都被一个数字替换,并且这个数字在 2 的补码和 1 的补码之间有 1 的差异。

从数学上讲(对于 8 位数字):

2's(N) = 1's(N) + 1
2's(N) = N ^ 0xFF + 1
2's(N) = N ^ 0xFF + 0xFE ^ 0xFF
2's(N) = (N + 0xFE) ^ 0xFF
2's(N) = (N - 1) ^ 0xFF
2's(N) = 1's(N-1)

每一步的理由:

Step 1: Given
Step 2: Definition of 1's complement
Step 3: Identity
Step 4: Distribution
Step 5: Identity (within 1's complement system)
Step 6: Definition of 1's complement
于 2012-08-25T16:15:03.667 回答