源码,反码和补码

 admin   2019-05-06 10:32   322 人阅读  0 条评论

1. 总的概念
    数在计算机中是以二进制形式表示的;
    数分为有符号数和无符号数;
    原码、反码、补码都是有符号定点数的表示方法;
    无符号数全部按正数处理;
    一个有符号定点数的最高位为符号位,0是正,1是负;


2. 反码,补码定义
    正数:
            原码=反码=补码
 
     负数:
             原码
             反码 = 其原码除符号位之外的各位求反
             补码 = 反码 + 1(如果+1之后有进位的,要一直往前进位,包括符号位)


3. 运算示例
     正零:00000000
     负零:10000000
     这两个数其实都是0,但他们的原码却有不同的表示。
     但是他们的补码是一样的,都是00000000
     特别注意,如果+1之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!)
     [10000000]补
     = [10000000]反 + 1
     = 11111111 + 1
     = (1)00000000
     = 00000000 (最高位溢出了,符号位变成了0)
 
     有人会问
     10000000 这个补码表示的哪个数的补码呢?
     其实这是一个规定,这个数表示的是-128
     所以 n 位补码能表示的范围是
     -2^(n-1) 到 2^(n-1)-1
     比 n 位原码能表示的数多一个
     又例:
     1011
     原码:01011
     反码:01011 // 正数时,反码 = 原码
     补码:01011 // 正数时,补码 = 原码
 
     -1011
     原码:11011
     反码:10100 // 负数时,反码为原码取反
     补码:10101 // 负数时,补码为原码取反+1
 
     0.1101
     原码:0.1101
     反码:0.1101 // 正数时,反码 = 原码
     补码:0.1101 // 正数时,补码 = 原码
 
     -0.1101
     原码:1.1101
     反码:1.0010 // 负数时,反码为原码取反
     补码:1.0011 // 负数时,补码为原码取反+1
 
4. 几个特殊定义:
     n 位补码能表示的范围:有符号数是 -2^(n-1) 到 2^(n-1)-1;无符号数是 0-2^n-1
     -128的补码是10000000, -128+1=-127,(-127)补=10000001=10000000+00000001 符合运算规则
     0的补码00000000


本文地址:https://liuchunjie.top/?id=151
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?