有一个有趣的事实:
数字N的2的补码相当于数字N减1的1的补码 即。
2's(N) = 1's(N-1)
以下结果显而易见。
2's(N) = 1's(N) + 1
如何在第二个结果的帮助下证明第一个结果?
答案 0 :(得分: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