ITPub博客

首页 > 应用开发 > IT综合 > 原码、反码和补码

原码、反码和补码

原创 IT综合 作者:longtrue 时间:2007-09-04 19:03:04 0 删除 编辑

几年前就思考的问题,很久没看有点陌生了,今天开始学习java遇到了这个问题,重新查找了些资料,看完有了更深刻的理解。

无符号整数无所谓反码、补码之说,但是对于符号整数计算机采用补码可以提高cpu的处理效率。数值单元最高位是符号位,指示该数是正还是负,对于正整数原码、反码、补码都是一样的,而负整数就有区别了,反码是原码除最高位外其余所有位的逐位求反, 将反码加上1就得到补码。下面以8位数值单位来举例,例如:

用最高位表示符号位,如果是0表示正数,如果是1表示负数,剩下的7位用来储存数的绝对值的话,能表示27个数的绝对值,再考虑正负两种情况,27*2还是256个数。首先定义0在计算机中储存为00000000,对于正数我们依然可以像无符号数那样换算,从00000001到01111111依次表示1到127。那么这些数对应的二进制码就是这些数的原码。到这里很多人就会想,那负数是不是从10000001到11111111依次表示-1到-127,那你发现没有,如果这样的话那么一共就只有255个数了,因为10000000的情况没有考虑在内。实际上,10000000在计算机中表示最小的负整数,就是这里的-128。因为-128 + 1 = -127,那么把10000000 加上1即10000001表示-127就容易计算很多了。这样,从10000001到11111111就刚好依次表示-127到-1。这就是所谓的补码。

那么补码是怎样直接地转换得来呢,这里还要引入另一个概念——反码,所谓反码就是把负数的原码去掉高位其余各个位按位取反,是1就换成0,是0就换成1,如-1的原码是10000001,那么-1的反码就是11111110,而补码就是在反码的基础上加1,即-1的补码是11111110+1=11111111,因此我们可以算出-1在计算机中是按11111111储存的。

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7406370/viewspace-967922/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    30
  • 访问量
    864036