计算机的整形数据补码存储方式以及相关的原理

原理

一,提出:计算机的模运算系统

        又称模算数 (modular arithmetic),是一个整数的算术系统,其中数字超过一定值后 (称为模)会“卷回”到较小的数值,在生活中特别常见的便是我们的钟表。

 这里出现一个的概念,究竟什么是模呢?

        模 我把它定义为这个系统中所表示的数字的最多的个数,例如钟表的模是12 ,因为它只可以表示0-11这十二个数,再比如对于一个四位的二进制数,它的模是16,因为它只能表示16个数(如果考虑负数则是-8到7,不考虑负数是0到15)那么对于一个n位的二进制数,它的模是2^n。 

        我们首先来看这样一个现象,当我们想将时针从四点拨到十一点,这时候我们有两种方法,一种是逆时针方向拨5,一种是顺时针方向拨7,因为两者相反,我们选定逆时针方向为正方向,则可以分别记作-5与+7,我们发现两者的达到的效果是一样的

        启发我们是否可以用一个正数来代替负数实现减法运算,(上例中用7代替-5)这便是计算机存储整形类数据的补码的生活源头,我们可以认为-5的补码为7。 通过这样的模运算,我们就可以把减法转换为加法。

计算机中减法的实现

        就是通过减去一个数等效于加上这个数的相反数的补码的实现的

        如我们要计算8-1等于多少?假设用四位存储

        =8+(-1)

        转换为二进制1000-0001=1000+0001的补码=  1000+1111=10111=0111(最高位要舍弃)

        那么该怎么求一个数的补码呢?

二:补码的求法

        那么我们可以怎样求一个数的补码呢,设该数为X,该运算系统中的模为M,我们通过上述不难发现

        【X补码】=(M+X)%M     (这里%为求余运算)

        即一个数的补码=(模+这个数)除以模的余数

        比如                           -1的补码=(16+(-1))%16=15

                                           1的补码=(16+1)%16=1

 观察我们发现

       正数的补码与原码相同

        负数的补码是最高位符号位为1不变,其余位原码按位取反,然后整个数加1

        例如: 存储器能够存储保留4位,则-7的补码为多少?

       用上面的公式【-7补码】=(16+(-7))%16=9

       实际上这个除模求余运算由计算机自动完成,        因为它会自动舍弃最高位(已经溢出),实现该运算,以上是它的原理,实际求补码只需要正数不变,负数各位取反再加1

        弄明白以上原理之后,我们便可以求得C++中的一些数据类型的范围了

        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值