原码 反码 和 补码。

来源:互联网 发布:旭辉研彩软件破解版 编辑:程序博客网 时间:2024/05/06 16:18

对于原码 反码和补码的概念。见下面链接,讲的不错:

http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

 

这里只讲下自己对反码的理解。大家都知道使用反码表示负数有两个优点,

     1. 可以使得减法可以和加法一样。

     2. 符号位也参与了运算。

那这是为什么呢?下面可以进行一些简单的数学推导:

 

根据反码定义,对于负数,反码是除符号为以外取反+1。

例如,-4 变换步骤如下。

A: +4     = 0 000 0100

B: 取反  = 0 111 1011

C: +1     = 1 111 1100 (并设符号为1,表示负数)

 

其中,在忽略符号位的情况下:

    A 到 B 的取反可以发现实际是,
        B = 127 - A

        所以,C = 127 - A + 1 = 128 - A 

 

所以当一个计算X - Y的时候,按照反码规则,

我们计算的二进制(忽略符号位)。实际是:V = X + ( 128 - Y )

 

这里可以看到反码的作用,的确是通过反码的编码将减法变成了加法。

然后考虑到符号位,

    (1)例E2,假设X - Y >= 0,那么V >= 128。二进制表示的话就会产生向最高位进位(导致最高位-即符号位+1)。

             由于存在负数(最高位为1),所以变为0.(同时进位被舍弃 即 例E2中括号中的1丢弃)

             实际效果是V - 128 ,即X - Y.

      (2) 见例E1,假设X - Y < 0,那么不会有进位,所以最高为为1,表示负数。记住对于X取反+1,实际是进行了128 - X的操作。

            所以 128 - V(即二进制的取反+1)的 -( x - y), 由于知道是负数,加个负号就是x - y了。

 

例子E1:

3 - 4 = -1.

+3: 0 000 0011

-4: 1 111 1100

-----------------------

     1 111 1111

最高位为1,所以为负数。取反+1得值为000 0001,所以是-1.

 

================ 例子分割=======================

例子E2:

4 - 3 = 1

+4: 0 000 0100

-3: 1 111 1101

---------------------

  (1)0 000 0001

 

特别的对于y=  128 - x  ( 0 <= x <= 127  )

对于-128( 1 000 0000 )的值对应的是正数的0(0 000 0000 ) 来映射的。

对于,为什么可以表示[-128,-1]这个我还没大弄明白。不过肯定和取反之后的+1 有关系。

 

x + (128 - y) = 0有关。

-------------------------

附上讲解才除法的

http://memorymyann.iteye.com/blog/354889

 

 

 

0 0
原创粉丝点击