计算机的原码、反码、补码

计算机的原码、反码、补码

为了方面理解,以8位的1和-1为例,解释原码、反码、补码的计算实例。

  • 计算机中最高位为符号位,符号位为0代表正数(0也划分为正数),符号位为1代表负数。
  • 正数的原码、反码、补码均为本身;
  • 负数的反码为原码除符号位外,其他位全部取反。
  • 负数的补码为反码加1;

1的原码、反码补码为:0000 0001
-1的原码为1000 0001
-1的反码为1111 1110
-1的补码为1111 1111

为什么计算机中会有补码呢?

计算中有了加法,为了节约成本,避免不必要的开销,用加法代替减法,如1-1=1+(-1)。如此,计算机的硬件只需要支持加法即可。

如果用加法来算减法,以1-1为例:
用原码来计算:
0000 0001
+1000 0001
=1000 0010
计算的结果1+(-1)=-2,与实际不符,所以直接用原码计算肯定是不行的,因为符号位参与计算,且计算机又不会区分最高位为符号位。

所以用到了补码进行计算。为了理解补码,下面介绍几个数学上的概念。

  • 是指一个计量系统的计数范围。
  • 如时钟的计量范围是0~11,模 = 12。
  • “模”是计量器产生“溢出”的量。
  • 它的值在计量器上表示不出来,计量器上只能表示出模的余数,如12的余数有0,1,2,3,4,5,6,7,8,9,10,11。

补数

假设当前时针指向11点,而准确时间是8点,调整时间可有以下两种拨法:

一种是倒拨3小时,即:11-3=8
另一种是顺拨9小时:11+9=12+8=8(11+1筹够一个模,从头开始重新计数,计数到指定位置8)

在以模为12的系统中,加9和减3效果是一样的,因此凡是减3运算,都可以用加9来代替。
对“模”12而言,9和3互为补数(二者相加等于模)。

所以我们可以得出一个结论,即在有模的计量系统中,减一个数等于加上它的补数,从而实现将减法运算转化为加法运算的目的。
即11-3=11+9=20,因为模是12,所以11-3=11+9=20-12=8

回到1-1的问题,

0000 0001
+1111 1111
等于
0000 0000

7-3
7
0000 0111
-3
-3原码1000 0011
-3反码1111 1100
-3补码1111 1101
0000 0111
+1111 1101
=0000 0100

3-7
-7原码1000 0111
-7反码1111 1000
-7补码1111 1001
3
0000 0011
+1111 1001
=1111 1100
因为结果负数,所以再取补码。(正数的补码还是本身)
0000 0011+0000 0001=0000 0100

总结

  • 计算机中的运算,就是取补码进行加运算,运算结果再取补码,就是正确的值。
  • 反码只是计算时用到的一个临时数,没有实际意义。

尾声

参考文章链接:https://blog.youkuaiyun.com/leonliu06/article/details/78685197

从时钟的举例到为何使用补码的过渡,不是很流畅。感谢大佬提出建议。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值