原码、反码、补码

17-12-10 13:29 字数 923 阅读 4574 已编辑

原码反码补码基本概念

  • 数据在计算机内部是以补码的形式储存的

  • 数据分为有符号数和无符号数

    • 无符号数都为正数,由十进制直接转换到二进制直接存储(其实也是该十进制的补码)即可。 有符号数用在计算机内部是以补码的形式储存的。( 正数的最高位是符号位0,负数的最高位是 符号位1。 对于正数:反码==补码==原码。 对于负数:反码==除符号位以外的各位取反。补码=反 码+1)
    • 正数的首位地址为0,其原码是由十进制数转换到的二进制数字
    • 负数的首位地址为1,其原码后面的位也为10进制数转换过去的二进制数字,都是用补码方式表示 有符号数的。
  • 在探求为何机器要使用补码之前, 让我们先了解原码, 反码和补码的概念.对于一个数, 计算机要 使用一定的编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字的编码方式.
    原码, 反码, 补码是计算机原理的术语。说白了就是为了理解计算机2进制用的。对于C/C++来 说,是和数据类型有关的。

  • 原码

    • 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值
      原码:[+1]0000 0001  
      原码:[-1]1000 0001  
  • 反码

    • 正数的反码是其本身
    • 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
      原码:[+1]0000 0001 反码:0000 0001  
      原码:[-1]1000 0001 反码:1111 1110  

      >+ 可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计 算.

  • 补码

  • 正数的补码就是其本身

  • 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

    原码:[+1]0000 0001 反码:0000 0001 补码:0000 0001  
    原码:[-1]1000 0001 反码:1111 1110 补码:1111 1111  

    >+ 对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.

-1在内存中存储细节

  • 在64为计算机中,-1的原码、反码、补码如下
    -1原码 1000 0000 0000 0000 0000 0000 0000 0001  
    -1反码 1111 1111 1111 1111 1111 1111 1111 1110  
    -1补码 1111 1111 1111 1111 1111 1111 1111 1111  

    >+ 正整数取反+1就是对应负数

0人点赞>
关注 收藏 改进 举报
0 条评论
排序方式 时间 投票
快来抢占一楼吧
请登录后发表评论
站长 @ 十七度
文章
384
粉丝
23
喜欢
195
收藏
31
排名 : 1
访问 : 147.3万
私信