两个补充证明

时间:2010-10-19 17:24:31

标签: math proof twos-complement

3 个答案:

答案 0 :(得分:1)

不是 111..111 的2的补码只是 1 (这意味着111..111代表-1)?

答案 1 :(得分:1)

您是否要求证明,例如,1111 1111的两个补码是0000 0000?如果是这样,你就无法证明它,因为它是假的。 1111 1111的两个补码是0000 0001

    1111 1111
->  0000 0000 <- one's complement
->  0000 0001 <- add 1

回复你的编辑:当然。但是你不需要归纳。反转0_n的所有位以获得一个补码会给你1_n并添加1将所有位翻转回零(1 + 1 = 10并且进位位渗透到结束我们放弃它)。 QED。

答案 2 :(得分:1)

1)X的两个补码的定义:翻转X的位和和1

2)两位变量的二进制和1位(http://www.play-hookey.com/digital/adder.html)(b1是第一个变量,b2是第二个变量.b1:X表示位X在变量中)

r1 = b1:1 XOR b2:1
carry = b1:1 AND b2:1

2.1)如果两个位都是一个b1:1和b2:1

r1 = 0  (always)
carry = 1 (always)

3)具有2位

的两个变量的二进制和
r1 = b1:1 XOR b2:1 
carry1 = b1:1 AND b2:1

r2 = (b1:2 XOR b2:2) XOR carry:1
carry2 = (b1:2 AND b2:2) OR (b1:2 AND carry:1) OR (b2:2 AND carry:1)

3.1)从2.1我们可以减少

carry2 = (b1:2 AND b2:2) OR (b1:2 AND 1) OR (b2:2 AND 1)
carry2 = b1:2 OR b2:2

4)数字为零全零。翻转所有位将生成一个全部数字:Ones

5)Bit 0 XOR Anything = Anything(异或真值表)

6)在数字零上应用(1)

6.1)翻转

 Flipping Zero = Ones

6.2)总和1

 result = Ones + N_One (N_One = 00...001)
 result:1 = 0 (from 2.1)
 carry:1 = 1 (from 2.1)

6.3)由于除N_One:1之外的所有N_One位都为零。

 result:n = (Ones:n XOR N_One:n) XOR carry:(n-1) (from 3)
 result:n = (Ones:n XOR 0) XOR carry:(n-1) (definition of N_One 6.2)
 result:n = Ones:n XOR carry:(n-1)

6.4)来自3.1

carry:n = Ones:n OR N_One:n -> if carry:n-1 is 1
carry:n = 1 OR 0            -> if carry:n-1 is 1
carry:n = 1                 -> if carry:n-1 is 1

当第一个进位(进位:1)从6.1定义为1时,所有进位定义为1

7)来自6.3和6.4

 result:n = Ones:n XOR carry:(n-1)
 result:n = 1 XOR 1
 result:n = 0

对于n的任何值,证明(~n + 1)始终为0.(总是忽略具有固定位域大小的机器的最后一个进位)

QED