关于原码、反码、补码的一点心得

在看本篇文章前,请先抛弃类比于时钟的想法,个人觉得那种理解方法真的没有必要,还容易把自己搞糊涂。

下面来了 

在现实世界中,数字都是以源码表示的,例如正4的自然二进制和负4的自然二进制仅仅相差的是最高位的符号位。由于计算机世界中没有减法,所以所有的数字需要以补码的形式表现出来,包括正数和负数,然后进行补码的相加就可以了,运算结果依旧是补码,需要变回源码,在真实世界中才能一眼看出它所表示的数字。


正数的源码(即最高位符号位为0)的反码和补码是它本身。

负数的源码(即最高位符号位为1,其余位和正数没有区别)的反码和补码要保证符号位不变,数值位取反再加1。


负128(源码)的反码是八个1,补码与源码相同,因为反码的数值位也及7个1在加1时已经溢出了,但是又不能影响符号位,所以符号位依旧是1,而数值位已经溢出为0了。(0000 0000是0,,,,,,,,,1000 0000是-128)(1111 1111是-127)
 

计算机中补码的计算,和自然二进制计算没啥取别,符号位也参加运算,计算结果按正数或者负数返回其源码就可以了,当然,正数的源码还是其本身。

发布了29 篇原创文章 · 获赞 3 · 访问量 3401

猜你喜欢

转载自blog.csdn.net/qq_41601836/article/details/103743916