原码、补码和反码之间的转换

在开始之前首先明确3个概念:

        1、正数的原码、补码和反码都是一样的。

        2、计算机中是用补码来表示数字的二进制的。

        3、二进制的最高位(第一位)是符号位,0表示正数,1表示负数。

下面以一些简单的例子来介绍原码、反码和补码。采用8位二进制来进行说明即:0000 0000;

原码

        [12]原 = 0000 1100,

        [-12]原 = 1000 1100,负数的原码就是正数的原码改变符号位。

反码

       反码是原码符号位不变,其余数值位按位取反。

        [-12]反 = 1111 0011。

补码

        补码是在反码最低位加1。(实际上补码和反码在定义上并没有直接的关系,只是恰好补码等于反码最低位加1)。

        [-12]补 = 1111 0100。

转换

    反码转原码(符号位不变,数值位取反)

         [X]反 = 1111 0011 -> [X]原 = 1000 1100

    补码转原码

        [X]补 = 1111 0010,根据原码转补码倒推,我们应该先补码-1得到[X]反=1111 0001,然后对反码取反得到[X]原=1000 1110=-14。但是如果减1在取反的话,存在借位的情况,这样算起来有时候容易出错。所以还要另外一种算法:先对补码的数值位取反,然后加1即可得到原码。(即补码的补码是原码

        [X]补 = 1111 0100 -> 1000 1011 -> 1000 1100。

    补码求相反数的补码

        已知[X]补=0000 1100,求[-X]补。

        按照老老实实的方法来算[X]原=[X]补=0000 1100,则[-X]原=1000 1100,[-X]补=1111 0100。当X为负数时,我们要先求其原码,在得到起绝对值的原码,正数补码原码一直,不用在计算。

        有一种简单的算法是对[X]补的符号位和数值位都取反再加1,即:

        [X]补 = 0000 1100 -> 1111 0011 -> 1111 0100。

关于我上面说的补码和反码无直接关系的原因可以参考原码,反码,补码的深入理解与原理原码、反码、补码知识详细讲解

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值