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

1.原码

原码:是最简单的机器数表示法,用最高位表示符号位(1负数,0正数),其他位存放该数的二进制的绝对值。
以带符号位的四位二进制数为例:1010,最高位为1表示这是一个负数,其它三位010,即022+1*21+02^0=2,所以1010表示十进制数-2。

原码的表示法很简单,虽然出现了+0和-0,但是直观易懂。于是开始运算——

0001+0010=0011,1+2=3;
0000+1000=1000,+0+(-0)=-0;
0001+1001=1010,1+(-1)=-2。

于是可以看到其实正数之间的加法通常是不会出错的,因为它就是一个很简单的二进制加法,而正数与负数相加,或负数与负数相加,就要引起莫名其妙的结果,这都是符号位引起的。0分为+0和-0也是因它而起。

原码的特点:

  1. 原码表示直观、易懂,与真值转换容易。

  2. 原码中0有两种不同的表示形式,给使用带来了不便。

    通常0的原码用+0表示,若在计算过程中出现了-0,则需要用硬件将-0变成+0。

  3. 原码表示加减运算复杂。

    利用原码进行两数相加运算时,首先要判别两数符号,若同号则做加法,若异号则做减法。在利用原码进行两数相减运算时,不仅要判别两数符号,使得同号相减,异号相加;还要判别两数绝对值的大小,用绝对值大的数减去绝对值小的数,取绝对值大的数的符号为结果的符号。可见,原码表示不便于实现加减运算。

2.反码

原码最大的问题就在于一个数加上它的相反数不等于0,于是反码的设计思想就是冲着解决这一点,既然一个负数是一个正数的相反数,那干脆用一个正数按位取反来表示负数。

反码:正数的反码还是等于原码;负数的反码就是它的原码除符号位外,按位取反。

以带符号位的四位二进制数为例:3是正数,反码与原码相同,则可以表示为0011;-3的原码是1011,符号位保持不变,低三位按位取反,所以-3的反码为1100。

再试着用反码的方式解决一下原码的问题——

0001+1110=1111,1+(-1)=-0;
1110+1100=1010,(-1)+(-3)=-5。

互为相反数相加等于0,虽然的到的结果是1111也就是-0。但是两个负数相加的出错了。

反码的特点:
1.在反码表示中,用符号位表示数值的正负,形式与原码表示相同,即0为正;1为负。
2.在反码表示中,数值0有两种表示方法。反码的表示范围与原码的表示范围相同。

反码表示在计算机中往往作为数码变换的中间环节。

3.补码

补码:正数的补码等于它的原码;负数的补码等于反码+1(这只是一种算补码的方式,多数书对于补码就是这句话)。

其实负数的补码等于反码+1只是补码的求法,而不是补码的定义,很多人以为求补码就要先求反码,其实并不是,那些计算机学家并不会心血来潮的把反码+1就定义为补码,只不过补码正好就等于反码+1而已。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值