补码-自己的理解

来源:互联网 发布:企业淘宝开店流程 编辑:程序博客网 时间:2024/06/08 11:17
参考:http://wenku.baidu.com/view/c5489104581b6bd97f19eab5.html
在8位机,或者说8位数中,计算玛的前提是:
1、原码的范围是-127~127;
2、反码的范围是-127~127;
3、补码的范围是-128~127;
补码的形式可以用以下公式计算:
1)正整数的补码与原码相同;
2)负整数的补码:2^8-|x|。【x为负整数】。
因此-128可以通过2^8-128得到,即1000 0000。同时根据计算玛的前提,-128是没有原码和反码的。

至于补码的范围和计算,需要从为什么用补码来说起了。在计算机的CPU中,计算单元只有加法器,而没有减法器,所以如果两个数,无论正负,只用加法就能计算出其值,是很符合CPU的计算方式的,但是原码和反码都不适合,所以计算机中没有用原码和反码来存储数据。这就要用到补码了。这里要引入一个重要的概念,模,对数求余数用到的模。
用现实中的例子讲解为什么通过模可以获得一个只用加法就能计算出其值的原因。现实中,钟表中表盘上的数就是对12取余而得到的数【12点也代表0点】,12就是这些数计算的模。我们规定,计算时,(1)顺时针旋转用正数表示;(2)逆时针旋转用负数表示【这个负数最终是用正数表示的,见(5)】;(3)几点,就用正数表示,比如指针指向2点,用2表示;(4)正数用本身代替,比如顺时针转到4点,就用4表示;(5)负数用12加上负数而得到的数表示,逆时针转8个小时,即-8,用12+(-8)=4,用4表示(6)当计算的数字超过12时,用12取余,为最终计算的数,因为最大数为11。好,我们开始举例,(1)当前钟表指向6点,顺时针旋转4个小时,指向了10点,即6+4=10;(2)当前钟表指向6点,顺时针旋转8个小时,指向了2点,即(6+8)%12=2;(3)当钟表指向6点,逆时针旋转4个小时,指向了2点,即6+(12-4)=14,14%12=2;(4)当钟表指向6点,逆时针旋转8个小时,指向了10点,即6+(12-8)=10.从上边例子可以看出。在这个用模计算的计算系统中,没有用到任何负数,即没有用到任何减法【-8,用4代替,也是用的加法】。这是计算机计算需要的。
对于8位机或者8位数,数的理论最大值为2^8 - 1=255,即256为8位能表示数的模,这些数为0~255,共256个,因为需要表示正负,所以分为2部分,即0~127、-1~-128,正数128个,负数128个,所以范围为-128~127。而计算的规则与上边钟表的规则大同小异,只不过模为256而已,比如说-6,用256+(-6)=250表示,即1111 1010,同理,-128用256+(-128)=128表示,即1000 0000,正数就用本身表示即可。
原创粉丝点击