对原码,反码,补码的一点儿理解。

这块儿一直迷迷糊糊的,有时做题或应用还会用到,计算机体系结构又没学好,哎。。,简单记录一下,帮助理解记忆吧。
对有符号整型而言,计算机运算采用补码形式,且不考虑符号位,以1byte=8bit为例简单说明。
原码也就是这里的有符号二进制码。
对正数,反码、补码与其原码一样。
对负数,反码是符号位以外的其余各位取反,补码是反码+1,简记为‘取反加1’。
按此规则,原码,反码,补码表示范围如下:
-127, ......, -1 , 0 , 1 , ......, 127
原码:11111111,......,10000001,00000000,00000001,......,01111111
反码:10000000,......,11111110,00000000,00000001,......,01111111
补码:10000001,......,11111111,00000000,00000001,......,01111111
那么问题来了,127+127+1=255, 2^8=256,因为最高为作为符号位了,还有一个数没表示出来,现在的表示范围是-127~127。怎么办呢?
很简单,因为10000000没用上,把它作为原码的话就是-0,没什么意义,跟别提反码了,所以把10000000作为-128的补码,反正运算都是以补码的形式,这样正好表示-128~127共256个数,10000001(-127)减1正好是10000000(-128),这样就完美了。
【对原码,反码,补码的一点儿理解。】当然书上有更深入更准确的讲解,具体再行查阅吧。

    推荐阅读