四季彩网址 上葡京网址 博胜堂 博胜堂官网 050五彩堂

1的补码及2的补码

  因为溢出,获得的成果等于0(0000 0000),就是由于两头-0占用了一个计数,我们把进位1加最初成果上,获得准确成果1:

  比力成心思的是因为+0用0000 0000暗示,反转后1111 1111就暗示-0。所以正在1的补码里有两个零。

  想象有一根数轴,两头别离向正无限和负无限延长,从两头0的一刀劈下去(0有两个),分成非负和非正的两半。

  我们考虑正在①+127处,我们加1变成-127,正在-127处我们再减1,同样会犯错。正在使用的时候我们要留意这种超出范畴的错误。②处,因为我们有两个零,正在做加法时,我们要加回一个0去。好比仍是计较(-1)+2,

  负数的补码经常用反码加一来计较。将补码取1的补码加法联系起来能够理解为什么能够用补码加法取代减法。

  更成心思的是,国内将1的补码翻译成反码,其求负数的反码时,保留符号位,将其余的比特进行反转。可是如许就不克不及注释为什么有-0的存正在。更不克不及注释正在IP,TCP,UDP,ICMP和谈头里求校验和时所谓的反码乞降是怎样回事。

  1的补码的加法跟其它的加法是一样的,只是它有个轮回进位(end-around carry)概念。它要求把最初成果的进位加回到最初的成果中去。

  将1的补码中-0的编码空出来给-1用,后续数值顺次前移,最初1000 0000会空出来,我们给它分派-128。因而,我们能够取值[-1,-128]U[0,127]。

  因为负数都是由响应的负数二进制位全反转获得的,所以这里有个特征就是把它们相加的话会获得一个二进制位为全1的数,正在1的补码的暗示方式中,全1暗示-0。这也是为什么这种暗示方式叫做1的补码。1的补码正在IP,TCP,UDP,ICMP等和谈头中使用于计较校验和。

  还有一点很成心思的是,正在1的补码暗示的数中,所有的负数最高比特都是0,而所有的负数最高比特都是1。并且它的正最大值是127,没有向上加过去暗示128。正在我们泛泛来看,最高位暗示符号位0代表正,1代表负是极为一般的事。可是正在1的补码里,没有设置符号位,之所以形成如许的巧合,存正在着必然的必然性。我们假设它能暗示到128,即1000 0000,那么-128就暗示成0111 1111,可是0111 1111曾经用来暗示127了,这就形成了冲突。其实问题很简单,我们能够把最高位的0,1看做是前缀码,用这位前缀码对负数的反转操做不存正在冲突。这也是为什么负数最大只能暗示到127。

  我们拿的圈来想象计较的过程,绕着圈顺时针走步,圈上的每一个数字对应一个走步,计较(-1)+2,也即正在(-1)处走两步,我们走到+0处。因为一般的运算中没有两个0,我们正在最初回加一个1。

  1的补码比力简单,它正在暗示负数的时候简单把该负数的绝对值(即响应的负数)的二进制位全数反转。好比1用0000 0001暗示,那么-1就用1111 1110暗示。

  那为什么能够用补码来计较减法呢?理解了反码的加法,其实就不难理解为什么补码能够间接用来计较减法了。

  从左往左看,从第一个1呈现的的下一位起头,反转比特,符号位不反转。好比(11010110) 的补码为10101010。