2010-10-19 108 views
1

是否有可能通过归纳证明对于所有长度为n的序列,0的任何字符串的二进制补码总是会导致0?二进制补码

我试图此使用值公式,即

值= -a_n-1×2 ^(N-1)+ {求和i = 0到N}(A_I×2^i到做),其中n =在串

+1

属于mathoverflow/math.SE? – SilentGhost 2010-10-19 17:26:26

+0

你可能会混合补码和补码。 – Qwertie 2010-10-19 17:29:01

+0

* Pet peeve:* [** Ones'** complement](http://en.wikipedia.org/wiki/Ones'_complement)(对一个评论和一个答案,并且在更多人陷入胡思乱想之前; ) – 2010-10-19 17:30:56

回答

1

比特数是不是2的的111..111补体只是(这意味着111..111表示-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。

+0

对不起,意思是0的字符串。例如,0000 =>翻转位并加1将产生1111 + 1 = 0000,并且丢弃1个进位。 – dnbwise 2010-10-19 17:40:09

+0

@dnbwise:查看我的编辑。你不需要感应。 – jason 2010-10-19 18:01:57

1

1)X的2周的补的定义:以1个比特翻转X和总和1

2)的两个变量的二进制总和的比特(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)是一个数字零全零。翻转所有位将产生所有那些数:问鼎

5)位0 XOR任何=任何(XOR的真值表)

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从N_One所有位:1是零。

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所有携带从6.3和6.4

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

对任意的n值定义为1

7),这证明(〜N + 1)总是为0(用于与机器的最后进位固定的位域大小总是被忽略)

QED