补码 原码 反码

来源:互联网 发布:东欧现状知乎 编辑:程序博客网 时间:2024/06/05 13:35

原码:在数值前直接加一符号位的表示法

           [+7]原= 0 0000111 B
           [-7]原= 1 0000111 B


反码 : 正数的反码与原码相同。

             负数的反码,符号位为“1”,数值部分按位取反。

             [+7]反= 0 0000111 B
             [-7]反= 1 1111000 B

补码 : 正数的补码和原码相同

          负数的补码则是符号位为“1”。并且,这个“1”既是符号位,也是数值位。数值部分按位取反后再在末位(最低位)加1。也就是“反码+1”。

           [+7]补= 0 0000111 B

           [-7]补= 1 1111001 B

在计算机系统中,数值一律用补码来表示和存储。使用补码,可以将符号位和数值域统一处理,同时,加法和减法也可以统一处理。
exp:
    20的二进制补码 = 00010100        25的二进制补码 = 00011001
       按位取反后:     11101011           按位取反后:     11100110
        末尾加 1 后:    11101100           末尾加 1 后:    11100111
   -20的二进制补码 = 11101100       -25的二进制补码 = 11100111

                -20                 11101100
           +(-25)    =    + 11100111
              -45                    111010011
超出的最高位去掉后 = 11010011
-45 的补码刚好是 11010011

                  20                 00010100        
           +(-25)    =    + 11100111
              -5                      11111011

-5 的补码刚好是 11111011
按照求负数补码的逆过程,数值部分应是最低位减1,然后取反。但是对二进制数来说,先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1 有方法
-5 的原码 10000101

注意溢出的问题:
   byte的取值范围 八位
   无符号位 0~255 (因为计算机是从0开始计算的而不是1)
   有符号位 -128 ~ +127
                     0000 0000 = +0
                     没有 1000 0000 = -0
                             1000 0000=-128  计算机以补码形式存储  这个“1”既是符号位,也是数值位。

1)(+72)+(+98)= 
0 1 0 0 1 0 0 0 B +72
01 1 0 0 0 1 0 B +98
1 0 1 0 1 0 1 0 B

11010110     -86

2)(-83)+(-80)=
1 0 1 0 1 1 0 1 B -83
1 0 1 1 0 0 0 0 B -80
0 1 0 1 1 1 0 1 B +93



0 0
原创粉丝点击