补码原理详细解读

 计算机进行加减运算时为了使设计尽量简单. 全部采用的加法,即根据运算法则减去一个正数等于加上一个负数, 即:3-2= 3 + (-2) = +1 ,因此只需要将负数的加法完善就会使计算机运算的设计更简单。 而此种运算需要将符号纳入到二进制中,于是人们开始探索 将符号位参与运算, 并且只保留加法的方法。

  十进制中的表达式: 1-1=0 。

原码表达式1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2 。如果用原码表示, 让符号位也参与计算, 显然对于减法来说,结果是不正确的。

 为了解决原码做减法的问题, 出现了反码:

反码表达式1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0 。

  如果用反码计算减法, 结果的真值部分是正确的. 而唯一的问题其实就出现在"0"这个特殊的数值上. +0和-0虽然数值是一样的, 但是0带符号是没有任何意义的。而且会有[0000 0000]原和[1000 0000]原两个编码表示0。我们再看一下2-1、3-1等计算就会发现,如果利用反码计算0、1…所有结果全都减少了1。

 为了解决此问题,产生了补码运算,在反码基础上加一再进行运算:

补码表达式1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原 。由于-0的原码是 [1000 0000],不会在正常的补码计算中出现,所以可以使它记做-128。

负数的补码是其原码的反码-1,补码的补码又是源码(和补码-1再求反码一样),为什么呢?

 接下来我们来看补码运算原理: 如果我们要计算6-4的值,我们既可以用6减去4,也可以用6加上12(提示:6-4=6-4+16=6+12,16进制!)。
在模16的系统下,4和12是互补的。 这样,我们计算6-4就可以换成6+12。

 同理负数补码的补码就是原码。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值