原码反码补码的转换方法

注意:下面内容中的数字均用8位二进制数表示。

原码

  • 最高位(最左边)代表符号位,0代表正数,1代表负数。

例:


 1 的原码是 0000 0001

-1 的原码是 1000 0001

反码

  • 正数的反码与原码一致。

  • 负数的反码是对原码按位取反,只是最高位(符号位)不变。

例:


 1 的反码是 0000 0001

-1 的反码是 1111 1110

补码

  • 正数的补码与原码一致。

  • 负数的补码是该数的反码加1。

  • 计算机数字运算均是基于补码的。

  • 单字节(8位)运算的模为256=2^8。负数的补码为模减去该数的绝对值。

例:


 1 的补码是 0000 0001

-1 的补码是 1111 1111

补码优势

  • 如果计算机内部采用原码来表示数,那么在进行加法和减法运算的时候,需要转化为两个绝对值的加法和减法运算。计算机既要实现加法器,又要实现减法器,代价有点大。

  • 化减为加,举一个生活中的例子来说明这个问题:时钟一圈是360度,当然也存在365度,但其实它和360度是一样的;相同的道理,-30度表示逆时针旋转30度,其与顺时针旋转330度是一样的;

这里数字360表示时钟的一圈,在计算机里类似的概念叫,它可以实现化减为加,本质上是将溢出的部分舍去而不改变结果。

实例


   15  => 原码: 0000 1111 => 反码: 0000 1111 => 补码: 0000 1111

+ (-5) => 原码: 1000 0101 => 反码: 1111 1010 => 补码: 1111 1011

---------------------------------------------------------------

                                    按反码计算后结果: 0000 1010

                                      转换为十进制是: 10

参考

  • https://www.jianshu.com/p/36ec7a047f29

  • https://zhidao.baidu.com/question/401222353.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值