狼道483 2022-05-01 23:10 采纳率: 75%
浏览 38
已结题

刚学c,原码反码补码

比如128 到-128
1000 0000原
1111 1111 反
1000 0000补
原码反码补码都有什么作用?

  • 写回答

2条回答 默认 最新

  • 关注

    一、原码、反码、补码 都是什么意思

    注意:如果源码是正数,原码,反码,补码,都是他本身
    (下方是为了方便理解才这样写的)
    

    原码:将一个任意进制数转换为二进制数,就是原码

    比如:  10(10)->1010(2) 
    其中1010就是源码
    

    反码:就是原码各位取反

    比如:1010(2)各位取反变成 0101(2)就是反码
    

    补码:就是反码+1

    比如上面的0101(2)+1=0110(2) ,得到的0110就是补码
    

    你现在已经了解了原,反,补码的概念
    接下来我们了解原,反,补码怎么运行的

    用1个字节(8比特)表示
    两个十进制数 15 和 -15
    

    源码

     100(10)=00001111(2)
    -100(10)=10001111(2)
    

    其中最高位是符号位

    这时候数8位bit的表示范围是

    11111111~011111111
    就是-127~+127
    最高位是符号位,1表示负,表示正
    

    反码

    借用上面的数据
     100(10)=00001111(2)
    -100(10)=10001111(2)
    

    取反之后

     100(10)=00001111(2)->00001111
    正数不变
    -100(10)=10001111(2)->11110000
    负数除符号位各位取反
    

    这时候数8位bit的表示范围是

    01111111~111111111
    就是+127~-127
    最高位是符号位,1表示负,表示正
    

    我们发现

    10000000(2)和00000000(2)
    都表示0,那么的话就会浪费一个表示数值
    

    那么就引进补码的概念
    同样正数不变,负数补码是反码+1

    100(10)=00001111(2)->00001111->00001111
    正数不变
    -100(10)=10001111(2)->11110000->11110001
    负数的补码是反码+1
    

    这时候数8位bit的表示范围是

    01111111~10000000
    就是+127~-128
    其中10000000(2)也就是原来的-0把它表示为-128
    

    引入补码的还有一个原因
    它可以将减法转换为加法
    比如

    14->补码->00001110
    -15->补码->11110001
    

    相加

    14+(-15)=00001110+11110001
    

    按位相加

    00001110
    11110001
    -------------------
    11111111
    

    就得到-1

    验证一下:

    十进制数:-1
    原码->10000001
    反->11111110->
    补->11111111
    

    也是学生一枚,如果有什么不好的地方请批判指正谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月10日
  • 已采纳回答 5月2日
  • 赞助了问题酬金10元 5月1日
  • 创建了问题 5月1日

悬赏问题

  • ¥15 Python语言实验
  • ¥15 SAP HANA SQL 增加合计行
  • ¥20 用C#语言解决一个英文打字练习器,有偿
  • ¥15 srs-sip外部服务 webrtc支持H265格式
  • ¥15 在使用abaqus软件中,继承到assembly里的surfaces怎么使用python批量调动
  • ¥15 大一C语言期末考试,求帮助🙏🙏
  • ¥15 ch340驱动未分配COM
  • ¥15 Converting circular structure to JSON
  • ¥30 Hyper-v虚拟机相关问题,求解答。
  • ¥15 TSM320F2808PZA芯片 Bootloader