前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >计算机基础知识之补码

计算机基础知识之补码

作者头像
愷龍
发布2024-06-06 09:07:40
1260
发布2024-06-06 09:07:40
举报
文章被收录于专栏:愷龍的Blog愷龍的Blog

补数的概念

如果讲时钟的指针从6拨到2,可以两种操作方式。

  • 逆时针拨动4下
  • 顺时针拨动8下

这两种方式是等价的,按照逆时针为负顺时针为正的话,在时钟拨动的案例中,+8 是-4以 12 为模的补数。

模的概念:

  • 模(或称模数)是一个数值计量系统的计量范围,记作mod或M。
  • 只要确定了“模”,就可找到一个与负数等价的正数来代替此负数,该正数就是负数的补数。
  • 超出计量范围的数都应该自动舍去模数

【举例】 6+13=19三7(mod 12)

在该8位寄存器中,能表示的无符号定点数最大数值为

2^{8}

,最小值为0。当超过最大值的时候就会舍弃模数(向前再进一位),而后这8位都从0开始。

补数的特点:

  1. 一个负数可用它的正补数来替代,而这个正补数可以用模数加上负数本身求得。
  2. 一个正数和一个负数互为补数时,它们绝对值之和即为模数
  3. 正数的补数即该正数本身(这个不用深究,记住就行)

对特点1来说,前面时钟的案例中[-4]的补数=12+(-4)=+8,同样的[-9]的补数为12+[-9]=+3

对特点2来说,|+8|+|-4|=12,|-9|+|3|=12

寻找一个负数的整补数的意义何在呢?

  • 把减法运用加法实现
  • 符号位也可以直接参与运算

这样在计算机内部就可以使用加法器来实现减法运算,而不必专门设置减法器,因而降低了硬件的复杂度和成本。

最后因为16超过模数范围自动舍弃模数即16-12得到最终结果4。

补码

将补数的概念应用到计算机内部,便出现了补码这种机器码(机器数)。

  • 正数的补码:符号位为0,数值位就是它本身。
  • 负数的补码:等于模数加上该负数本身,而模数就是最高位进位的位权值。

定点整数的补码定义:

假设真值x为定点整数,n为x的补码表示中数值位的位数(比特数量),加上1个符号位,x的补码表示共有n+1位,最低位的位权值为

2^{0}

,而最高位(符号位)的位权值为

2^{n}

,因此最高位进位的位权值为

2^{(n+1)}

,即模数为

2^{(n+1)}

0在补码和原码表示时候的区别:

可以看出正数的原码与补码相同,而负数的原码和补码是不同的。

0在原码中有两种表示形式,但是在补码中只有一种表示形式,因此补码可以比原码多表示一个数。

定点小数的补码定义:

假设真值x为定点小数(纯小数),小数点左侧的位为最高位(符号位),其位权值为

2^{0}

,而最高位进位的位权值为

2^{1}

,即模数为

2^{1}

=2。

现代计算机中多采用IEEE754标准表示浮点数,而其中的定点小数采用原码表示,因此通常不会涉及定点小数的补码表示。

相关参考:https://www.cnblogs.com/kevinq/p/4480563.html

补码优缺点:

优点:

  1. 表示方法使得减法运算可以转换成加法运算。
  2. 真值0在补码中只有一种表示,这使得补码比原码多表示一个最小负数。
  3. 符号位可以直接参与运算,运算时符号位的进位作为模会被自动舍弃。

目前计算机中普遍采用补码表示有符号定点整数,例如C语言中char、short、int、long型整数 都是采用补码进行表示的。

缺点:

  • 补码的表示相对原码更加复杂。 □原码的数值位与真值的绝对值相同。因此,通过原码可以很容易地得出真值。但是,补码就没有这么简单了。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 补数的概念
  • 补码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档