为了账号安全,请及时绑定邮箱和手机立即绑定

补码

标签:
面试

计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。


  • 特性
    1、一个负整数(或原码)与其补数(或补码)相加,和为模。
    2、对一个整数的补码再求补码,等于该整数自身。
    3、补码的正零与负零表示方法相同。


  • 模的概念可以帮助理解补数和补码。
    “模”是指一个计量系统的计数范围。如时钟等。计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”。

例如:
时钟的计量范围是0~11,模=12。表示n位的计算机计量范围是0~2^(n)-1,模=2^(n)。

“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。任何有模的计量器,均可化减法为加法运算。

例如:
假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨4小时,即:10-4=6;另一种是顺拨8小时:10+8=12+6=6
在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替。对“模”而言,8和4互为补数。实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特性。共同的特点是两者相加等于模。

对于计算机,其概念和方法完全一样。n位计算机,设n=8, 所能表示的最大数是11111111,若再加1成为100000000(9位),但因只有8位,最高位1自然丢失。又回了00000000,所以8位二进制系统的模为2^8。在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。把补数用到计算机对数的处理上,就是补码。


另外两个概念:

  1. ones' complement
    这种表示法中,正数保持不变(因为这个方案就是要解决有效地将减法运算变成加负数的运算,所以,正数不需要变动,这里的反,就是相对于正数的二进制形式来说的),负数用公式 [1] (n为将符号位算在内的位数)计算。可以形象的将对应的正数的二进制形式的各个位取反即可。(这里和得到反码的步骤不一样。反码,补码,都是从原码开始操作得到。这里是从正数开始操作得到。但两者除了计算的起点不同,最终得到的编码形式是这样的。为了区别操作过程的不同,故仍然采用英文名。)
    用四位二进制数做例子。那么-7的二进制(0111)各各位取反得到其ones complement数(1000)。就是其中最左边的一位为符号位。N=7 ,n=4,带入公式,得 =-7以及其二进制形式,过程如下:
    2^{4}= 10000
    减1 - 0001
    01111
    减7 - 0111
    01000加粗的这部分呈现的是-7.

  2. twos complement
    由于上面一种表示法 [1] (n为将符号位算在内的位数)
    观察公式,twos complement数,相当于ones complement 数+1.
    下面用4位二进制数来做例子:
    2^{4}= 10000 2^{4}= 10000
    减7 - 0111 减负7 - 1001
    01001加粗部分表示-7 0 0111 加粗部分表示+7
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
1
获赞与收藏
30

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 1
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消