原码、反码和补码

数据在计算机中如何存储?

数据在计算机中都是以二进制进行存储的,一个bit也就是一个二进制位只能表示0或者1,能存储的信息太少了,所以8个bit分为一组,称为字节,是计算机中最小的存储单元了。

二进制的原、反、补3种形式。

原码

一个字节的8个bit中,首位称为符号位,只用来表示正负,0表示正数,1表示负数,是不参与计算的,剩下的7位是数值位,用来存储数据,所以一个字节所能表示的数据范围为1111,1111~0111,1111,即-127~-0,+0~127,共256个,但是实际一个字节所能表示的范围却是-128~127,这是为什么呢?学习了补码之后就知道原因了。

下面举一个原码的例子:

56的原码:0011 1000;

-56的原码:1011 1000

反码

当计算-56+1时,使用原码的结果为-57,正确应该是-55啊,所以使用原码对负数进行计算时是有问题的。

那么如何解决呢?

就提出了反码,反码的规则如下:

(1)正数的反码仍是其原码;

(2)负数的反码是符号位不变,每一位二进制位取反。

怎么想到这么天才的解决办法的,真是厉害。

下面是使用反码计算-56+1的过程,要注意到使用反码进行计算的结果仍然是反码,可以转换为原码查看十进制的结果。

补码

当使用反码进行负数的计算时,当计算的结果不大于0是不会出现问题的,当越过0时问题就出现了。 

比如-2+3,运算步骤如下:

按说应该是1,但是实际却是+0,与实际结果1相隔了一位。

为什么会出现这种情况呢?

原因就是0在反码中有两种表现形式,分别是+0(0000,0000)和-0(1111,1111),将其变为一种就可以了,实现方式是将-0的反码(1111,1111)+1转变为(0000,0000),这样就与+0的反码相同了,不管+0,-0在计算机中都只有一种表现形式为了。

-1~-127的反码为1111,1110~1000,0000,由于-0的反码(1111,1111)+1转变为(0000,0000),导致现在的反码少了一个1111,1111,这种是不连贯的,在计算的时候还是有问题的,所以-1~-127的反码也都跟着+1,将少的1111,1111给填上。

因此这种定义为补码,补码的规则为:

(1)正数的补码仍是其原码;

(2)负数的补码是反码+1。

会把1000,0000给空出来,所以额外将1000,0000定义为-128的补码,并且-128无原码和反码形式。

在计算机中无论正数还是负数都是以补码的形式进行存储的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值