5.1.5_原反补码的特性对比

简介: 计算机组成原理之原反补码的特性对比

这一小节中,我们要学习原码、反码、补码3 种码的特性对比,需要注意这样的几个维度。
image.png

一会我们会来分别探讨,这是小题当中很常见的考点哈。

这个小节的内容不难,也不多,我们只需要注意表里边给大家总结的问题就可以了。
image.png

经过之前的学习,我们知道了带符号的整数,可以用原、反、补三种方式来表示。

无符号的整数把所有的比特位都作为数值位,无符号的整数它只有一种编码方式,所以我们没给它取什么什么码这样的名字。

接下来我们来看一下对于 n + 1 个比特表示的原码、反码、补码以及无符号整数,它们的合法表示范围、最大的数、最小的数以及真值 0 的表示分别是什么样的情况。

(1)原码

首先,之前我们讨论过原码的表示范围。如果用 n + 1 个比特表示原码,原码的数值位就有用 n 个比特来表示,n 个比特可以表示的数的范围应该是 0~ 2 的 n 次方减1。再加上1个比特的符号位,可以表示正号或者负号。

因此原码它的一个合法表示范围是这样的范围,它可以表示的最大的数应该是正数0,后面所有的都是 1 ,转变成十进制的值应该是 2 的 n 次方减1。

最小的数就是负的1,数值位让它保证值是最大的,也就是全为1。这样我们就可以表示最小的数,负的 2n 次方减1。

之前我们也说过,原码的真值 0 有两种表现方式,一种是正0,一种是负0。

(2)反码

反码和原码是一毛一样的。

首先,反码和原码,它们的合法表示范围都一样。

反码它也有正0和负0这两种真值 0 的表示形式,反码可以表示的最大的数和最小的数,真值和原码也是一致的,所以反码其实不用多说。

(3)补码

这儿我们需要特别注意的是补码

补码可以表示的合法范围要比原码更多一个负数。

如果用 8 个比特来表示原反补码的话,原码和反码可以表示的范围应该是-127 到+127,而补码可以表示的范围应该是-128 到+127。
image.png

补码可以比原码多表示一个负数。最小的负数的补码形式长1,000...000这个样子,就是符号位为1,后面的全部为0。

如果是8比特的补码,可以表示的最小的数应该是10000000,这是8比特可以表示的最小的数,它的真值是-128 。

8比特的原码可以表示的最小的数应该是1,1111111这样的一个值,也就是-127 。

所以我们上一小节讲过原码和补码之间的相互转换。由于补码可以比原码多表示一个负数,所以补码当中更小的负数,想要把它转变为位数相同的原码是不可能的,转不了,因为用相同的位数原码没办法表示-128 这个数。

所以这是补码最特殊的一个存在,它可以比原码多表示一个负数。

同时在补码当中,真值 0 也只有唯一的一种表示方式,符号位为0,后面的这些也全部为0。

所以这一点是一定要注意的。

(4)无符号整数

最后看无符号整数

这些特性我们在讲无符号整数的小结当中,也给大家总结过。 n + 1 个比特表示无符号整数,那么它的合法表示范围可以表示的最大的数,最小的数,还有真值 0 的表示方法,这些大家也都需要很熟悉。

重点要强调的还是补码它的表示范围以及真值 0 的表示方法和原码反码之间的一点区别。

大家特别注意标红的这些地方就可以了。


最后再说一个在很多小题和大题当中都挺常见的一种考法。

题目会给你两个数 A 和B。一般来说就是用二进制或者 十六进制来表示。他会问你这两个数进行某种运算之后,比如加减乘除这些运算之后,问你是否会发生溢出。

这种题目怎么解决?

如果手算,你判断溢出的方法可以带入十进制去验证。

我们来看。 以8比特为例,如果用8比特表示 A 和B,如果这8比特是用原码的方式来表示, 那么A 的值是原码表示的-64, B 的值是原码表示的-64。

题目如果问你 A 和 B 进行加法之后,结果同样用8比特的原码表示,是否会发生溢出。

显然会发生溢出,-64和-64,两个一相加应该是等于-128。

而8比特的原码可以表示的范围就是-127到+127,显然这个值已经超出了8比特原码可以表示的范围,所以此时一定会发生溢出。

如果换一个情况,如果这8比特是用补码表示的,同样 A 是-64, B 也是-64,问你 A 加 B 的结果,同样用8比特的补码来保存有没有发生溢出呢?

此时就没有发生溢出,我们说了,补码它可以多表示一个负数,8比特的补码可以表示的合法范围应该是-128 到+127,所以 A 加 B 的值刚好没有超出8比特补码可以表示的范围。

因此如果是用补码来保存结果,此时加法运算就没有发生溢出。

以上就是小节的全部内容。

相关文章
|
IDE 物联网 开发工具
【史上最全面esp32教程】点灯大师篇
【史上最全面esp32教程】点灯大师篇
1265 0
|
监控 Java 应用服务中间件
网关大解密:探索Spring Cloud Alibaba中Gateway的奥秘
网关大解密:探索Spring Cloud Alibaba中Gateway的奥秘
659 1
|
机器学习/深度学习 数据处理 对象存储
机器学习平台PAI智能标注之文本标注 Quick Start
智能标注(iTAG)是机器学习平台PAI上一款智能化数据标注平台,支持图像、文本、视频、音频等多种数据类型的标注以及多模态的混合标注。智能标注(iTAG)提供了丰富的标注内容组件和题目组件,您可以直接使用平台预置的标注模板,也可以根据自己的场景自定义模板进行数据标注。本文以文本标注为例快速演示该功能的使用,以供参考。
1630 0
机器学习平台PAI智能标注之文本标注 Quick Start
|
前端开发 JavaScript API
< 谈谈对 SPA(单页面应用)的理解 >
浅谈 SPA 相关知识,了解SPA相关优缺点 及 实现原理等。
226 1
< 谈谈对 SPA(单页面应用)的理解 >
|
11月前
|
Prometheus Kubernetes 监控
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
359 1
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
|
JSON 测试技术 API
API接口:原理、实现及应用
API接口:原理、实现及应用
|
jenkins 持续交付
使用 Jenkinsfile 实现流水线即代码 (Pipeline as Code)
【8月更文第31天】在现代软件开发实践中,持续集成(CI)和持续部署(CD)已经成为不可或缺的一部分。Jenkins 是一个非常流行的 CI/CD 工具,它支持多种方式来定义构建流程,其中“流水线即代码”(Pipeline as Code)是一种将构建逻辑版本化并纳入源代码管理的方法。这种方式不仅使得构建流程更加透明,也方便团队协作和版本控制。
914 0
|
JavaScript 关系型数据库 MySQL
node连接mysql,并实现增删改查功能
【8月更文挑战第26天】node连接mysql,并实现增删改查功能
365 3
|
存储 负载均衡 监控
|
Shell
ZooKeeper【基础 02】zookeeper-3.6.0 常用Shell命令(节点增删改查+监听器+四字指令)
【4月更文挑战第9天】ZooKeeper【基础 02】zookeeper-3.6.0 常用Shell命令(节点增删改查+监听器+四字指令)
241 2