对于二进制来说,为什么对于二进制数来说,先减“1”取反和先取反再加“1”的结果是一样的

对于二进制来说,为什么对于二进制数来说,先减“1”取反和先取反再加“1”的结果是一样的,如何给出严格的数学证明?另外对于x1x2x3x4这四位二进制来说,为什么加上1111之后相当于每位按位取反?为什么不考虑进位的问题?即如果x1x2x3x4为0001的话,按上述说法不考虑进位应该是1110,可加上的结果却是10000?这是什么回事?忘高手指点迷津。

这个问题确实很有意思,我的想法是这样的:
我们拿源码和补码来举例,大家可以看一下补码的产生。
我们都知道计算机只认识二进制0/1,为了表示正负,我们用最高位来区分,但是计算机还是不分正负,只认0/1。
由于用手机打字不方便,我就简述一下。
通常我们正数用原码表示,负数用补码表示,在这里为什么负数不用反码?是因为原码和反码相加结果就是一连串的1而不是0,而对二进制来说,只需要再加一个1就会让结果成为一连串0
为了表示正负数,正负数最本质的特性就是值相同的正数和负数加起来为0
因为原码加补码为0,我们已经用原码表示了正数了,那补码我们就用来表示负数
所以求补码的过程其实就是正负转换的过程
(x)>>>取反>>>加一>>>(-X)

这个过程看懂了你就明白为什么二进制数取反加一和减一再取反结果相同了

从x到-x我们可以取反再加一,从-x到x我们可以先减一再取反(逆过程为减一这个大家都懂)
这个过程被解析成了两步,对于计算机来说根本没有正负之分,所以这个过程一直都是可逆的
x取反加一变成(-x),那(-x)减一取反就为x
如果大家还感觉不清楚,那是因为这不仅是一个双向的单行道,它还是个圈。
因为x取反加一变成了(-x),那(-x)取反加一又会变成x
负负得正大家都懂,我们的正负概念对于计算机来说,只不过是两种算法分两部进行,你想求的相反数你可以逆着求,也可以说着取反加一这条路走下去
一直都是我们眼中的正负在转换
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-25
这个问题蛮有意思的,我的想法是这样的:
假设一串n位的二进制数记为“A”,A=a[n-1]*2(n-1)+a[n-2]*2(n-2)+....+a[1]+a[0]。设从a[0]开始,第一个为1的为a[i],(0<=i<=n-1)。然后分别进行“取反加一”和“减一取反”的计算,取反时,每一位可表示为(1-a[j])的形式,最后算出来的结果是一样的。本回答被网友采纳
第2个回答  2020-04-11
对于一个N位的二进制数a(按整数字节来说,N是8的倍数),对这个数取反得到二进制数b,由于求补码时符号位不参与运算,直接去掉,则一定有a+b = 2^(N-1)-1(十进制),设为X,即全1的N-1位二进制数。所以有a+b=X。
因此:a先取反后加一的结果为:b+1 = X-a+1;而先减一后取反的结果为:X-(a-1) = X-a+1
显然两者结果相同。
另外你说的四位数加上1111,如果每一位都不考虑进位的话就相当于按位取反,即0+1=1 , 1+1=0,这个用于理解反码,不用于计算;如果每一位都考虑进位的话就是正常计算两个二进制数相加,是计算结果。
第3个回答  2019-09-20
N个字节,总和为2^N-1,一个大小为n的数,取反等于总和减去本身。这里是取反操作最为直观得现象,因为取反前后相加每位都是1。你得取反有一定道理但是太扭了。
现在:(1)n减一得:n-1,再取反得:2^N-1-(n-1)=2^N-n。(2)n取反得:2^N-1-n,再加一得:2^N-n。以上证毕。
第4个回答  2022-03-30
关于“先减1再取反等于先取反再加1”的数学证明。
可以这么理解为:
已知一整数 X ,-X = ~X+1,X∈N,~X是X的取反。
求证:-X = ~(X-1) 。
证明:
∵-X = ~X+1 ,X∈N
∴ X = -(~X)-1
∴~X = -X-1
令X=X-1,则上式化为:
~(X-1) = -(X-1)-1
~(X-1) = -X+1-1
即:-X = ~(X-1)
∴ ~X+1= ~(X-1)= -X