【计算机组成原理】详细解读带符号整数在计算机中的运算
有符号整数的运算
- 导读
- 一、补码的优势
- 二、补码的加法运算
- 三、补码的减法运算
- 四、原码、反码、补码的特性
- 结语
导读
大家好,很高兴又和大家见面啦!!!
经过前面的介绍,我们已经初步认识了有符号整数的三种表示形式:
- 原码——用机器数的最高位表示符号,其余位表示数值。
- 符号位为0,表示正数
- 符号位为1,表示负数
- n n n 位机器数对应的取值范围: − ( 2 n − 1 − 1 ) ~ 2 n − 1 − 1 -(2^{n-1}-1)~2^{n-1}-1 −(2n−1−1)~2n−1−1
- 反码——原码符号位不变,数值位按位取反。
- 反码常用于数码变换的中间表示形式
- n n n 位机器数对应的取值范围: − ( 2 n − 1 − 1 ) ~ 2 n − 1 − 1 -(2^{n-1}-1)~2^{n-1}-1 −(2n−1−1)~2n−1−1
- 补码——反码+1
- 有符号整数在计算机中的存储形式
- 补码的符号位参与运算
- n n n 位机器数对应的取值范围: − 2 n − 1 ~ 2 n − 1 − 1 -2^{n-1}~2^{n-1}-1 −2n−1~2n−1−1
在接下来的内容中,我们将会进一步的深入探讨原、反、补这三种表现形式的内容。今天我们将会从最简单的有符号整数的运算开始介绍。
在前面我们有提到过,有符号整数在通过原码进行运算时,会存在一些问题:
- 两个不同符号的加法运算(或同符号的减法运算),需要完成三步运算:
- 比较两个值的绝对值大小
- 用绝对值大的数减去绝对值小的数
- 给运算结果选择合适的符号
- 两个同符号的加法运算(或不同符号的减法运算),需要完成三步运算:
- 减法运算改为加法运算,即加上被减数的相反数
- 从右到左,数值位逐位相加,符号位不参与运算
- 符号位取左操作数的符号
可以看到,同样是加减法运算,仅仅因为加减法的对象不同,其运算的方式却有差异,为了提高运算的效率,降低硬件的开发成本,于是便有了补码,那么在有符号的整数中,其补码形式又是如何进行运算的呢?下面我们就一起来探讨一下补码的加减运算;
一、补码的优势
在原码的运算中,由于机器数的最高位表示的是符号位,并且符号位不参与运算,因此实际在进行运算的只有除符号位以外的数值位,而运算结果的符号,还需要根据结果进行判断,这就导致其运算过程变的及其复杂;
但是在补码的运算中,符号位要参与运算,此时我们就不需要再去考虑结果的符号,正常的完成运算后,运算结果的符号也就同时确定了下来,这样就大大降低了运算的难度。
而且真值0的原码表示有 [ + 0 ] 原 = 0 , 0000 [+0]_原=0,0000 [+0]原=0,0000 和 [ − 0 ] 原 = 1 , 0000 [-0]_原=1,0000 [−0]原=1,0000 两种形式,而在补码中,真值0的补码只有 [ 0 ] 补 = 0 , 0000 [0]_补=0,0000 [0]补=0,0000 一种形式,并且补码相比于原码还能够多表示一位负数 − 2 n − 1 -2^{n-1} −2n−1 。
从这几点来看,有符号整数以补码的形式进行存储,并通过补码运算的优势还是很明显的。
二、补码的加法运算
有符号整数的补码加法规则很简单,从右到左,依次相加,逢二进一,如下所示:
可以看到,整个过程并不复杂,并且这个过程有细心的朋友就会发现,除了后续的补码转换成原码之外,整个加法运算的过程是和无符号整数的加法是一样的。那么这个补码的运算是否和无符号整数的运算有联系呢?
在无符号整数的运算中我们就有介绍过,计算机中,减法电路的造价会高于加法电路的造价,因此,为了节约开发成本,计算机中的减法都会以加法的形式来完成,这里就包括有符号整数的加法。
那在有符号整数中的减法是如何实现的呢?下面我们就来继续探讨一下有符号整数的减法;
三、补码的减法运算
有符号整数的减法实际上和无符号整数的减法一样,在式子 A − B A-B A−B 中都是选择将减数 B B B 按位取反,末位+1,注意这里的按位取反是连同符号位一起按位取反,如下所示:
当完成转换后我们会发现,最终得到的这个数值应该是减数的相反数,为什么会这样呢?
其实这里很好理解,我们要注意看减数的这一步转换是如何执行的:
- 先转换数值位:按位取反,末位+1,这个一步转换获取的减数对应的原码
- 再转换符号位:按位取反,此时负数变成了正数
这么一看,经过这一步换算之后,原数的相反数了吗。这时有朋友就会说了,你这是负值的转换,当然没问题了,那正值呢?
这个问题问的非常好,对于正数而言,它的转换过程如下所示:
- 先转换符号位:按位取反,此时整数变成了负数
- 再转换数值位:按位取反,末位加1,此时获取的是负数的补码
从正数的转换来看,我们把这种转换成为获取减数的相反数似乎是不太准确的,更准确的说法应该是相反数的补码:
- 正数:获取的是其对应负数的补码
- 负数:获取的是其对应正数的补码
在完成转换后,此时的减法也就变成了加法,其运算规则为:从右到左,逐位相加,逢二进一。
现在大家有发现什么吗?
没错,当有符号整数以补码的形式进行运算时,其运算的过程与无符号整数的运算是一致的,也就是说,用补码的形式来存储有符号整数,在进行运算的时候,可以使用同一个电路来完成无符号整数和有符号整数的运算,而且还是使用造价低的加法电路,
四、原码、反码、补码的特性
接下来我们就来对原码、反码、补码的特性做个总结,以机器数为n位的机器为例,下面我们会从不同的方面来进行对比:
- 真值0的表示形式
- 原码:两种表示形式: [ + 0 ] 原 = 0 , 0000 [+0]_原 = 0,0000 [+0]原=0,0000 和 [ − 0 ] 原 = 1 , 0000 [-0]_原 = 1,0000 [−0]原=1,0000
- 反码:两种表示形式: [ + 0 ] 反 = 0 , 1111 [+0]_反 = 0,1111 [+0]反=0,1111 和 [ − 0 ] 反 = 1 , 1111 [-0]_反 = 1,1111 [−0]反=1,1111
- 补码:一种表示形式: [ 0 ] 补 = 0 , 0000 [0]_补 = 0,0000 [0]补=0,0000
- 无符号整数:一种表示形式: 000 … 000 000…000 000…000
- 最大值:
- 原码: 2 n − 1 − 1 2^{n-1}-1 2n−1−1
- 反码: 2 n − 1 − 1 2^{n-1}-1 2n−1−1
- 补码: 2 n − 1 − 1 2^{n-1}-1 2n−1−1
- 无符号整数: 2 n − 1 2^n-1 2n−1
- 最小值:
- 原码: − ( 2 n − 1 − 1 ) -(2^{n-1}-1) −(2n−1−1)
- 反码: − ( 2 n − 1 − 1 ) -(2^{n-1}-1) −(2n−1−1)
- 补码: − 2 n − 1 -2^{n-1} −2n−1
- 无符号整数: 0 0 0
- 取值范围:
- 原码: − ( 2 n − 1 − 1 ) ~ 2 n − 1 − 1 -(2^{n-1}-1)~2^{n-1}-1 −(2n−1−1)~2n−1−1
- 反码: − ( 2 n − 1 − 1 ) ~ 2 n − 1 − 1 -(2^{n-1}-1)~2^{n-1}-1 −(2n−1−1)~2n−1−1
- 补码: − 2 n − 1 ~ 2 n − 1 − 1 -2^{n-1}~2^{n-1}-1 −2n−1~2n−1−1
- 无符号整数: 0 ~ 2 n − 1 0~2^n-1 0~2n−1
- 运算方式:
- 原码:数值位运算,符号位不参与运算
- 反码:不参与运算
- 补码:数值位符号位都参与运算
- 无符号整数:所有二进制位都参与运算
结语
今天的内容到这里就全部结束了,在下一篇内容中我们将介绍《移码》的相关内容,大家记得关注哦!如果大家喜欢博主的内容,可以点赞、收藏加评论支持一下博主,当然也可以将博主的内容转发给你身边需要的朋友。最后感谢各位朋友的支持,咱们下一篇再见!!!
相关文章:

【计算机组成原理】详细解读带符号整数在计算机中的运算
有符号整数的运算 导读一、补码的优势二、补码的加法运算三、补码的减法运算四、原码、反码、补码的特性结语 导读 大家好,很高兴又和大家见面啦!!! 经过前面的介绍,我们已经初步认识了有符号整数的三种表示形式&…...

vue3常见的bug 修复bug
Vue 3 作为 Vue.js 的最新版本,在性能、开发体验以及代码可维护性等方面带来了显著的提升。然而,就像任何软件框架一样,Vue 3 在使用过程中也可能遇到一些典型的bug或问题。以下是一些可能遇到的典型问题: 响应式系统相关的问题&…...

C++课程笔记 类和对象
类概念 结构体:只要属性 类:有属性也有方法 c可以省略struct c不行 #include<iostream> using namespace std;typedef struct queue1 {int a;queue1 q() {queue1 q(2);return q;};queue1(){}queue1(int qa){a qa;} }q1; int main() {queue1 Q1;…...

提问即创作:用Prompt提示词引领AI灵感爆发
文章目录 🍊AI内容创作的精髓:提示词Prompt1 什么是提示词工程?1.1 提示词是如何影响AI的输出结果?1.2 提示词的原理是什么1.3 提示词工程师的前景1.4 谁能成为提示词工程师?1.5 提示词的未来前景 2 提示词的基本书写技巧3 常见的提示词框架…...

一码空传临时网盘PHP源码,支持提取码功能
源码介绍 一码空传临时网盘源码V2.0免费授权,该源码提供了一个简单易用的无数据库版临时网盘解决方案。前端采用了layui开发框架,后端使用原生PHP编写,没有引入任何开发框架,保持了代码的简洁和高效。 这个程序使用了一个无数据…...

自然语言处理实战项目
自然语言处理实战项目 自然语言处理(NLP, Natural Language Processing)是人工智能的重要分支之一,致力于让计算机理解、生成并与人类进行语言交互。随着深度学习、神经网络和大数据的发展,NLP技术在近年来取得了飞跃性的进展&am…...

人工智能物联网的去中心化和分布式学习:全面综述、新兴挑战和机遇
这篇论文的标题是《Decentralized and Distributed Learning for AIoT: A Comprehensive Review, Emerging Challenges, and Opportunities》,作者是Hanyue Xu, Kah Phooi Seng, Li Minn Ang, 和 Jeremy Smith。论文发表在IEEE Access期刊上,接收日期为2…...

滑动窗口算法—最小覆盖子串
题目 ”最小覆盖子串“问题,难度为Hard,题目如下: 给你两个字符串 S 和 T,请你在 S 中找到包含 T 中全部字母的最短子串。如果 S 中没有这样一个子串,则算法返回空串,如果存在这样一个子串,则可…...

应用案例|开源 PolarDB-X 在互联网安全场景的应用实践
背景介绍 中盾数科集团始创于2012年,是由网络安全服务而发展起来的科技型、多元化的企业集团。旗下包括网络安全服务、信创一体化服务、箱式液冷、区块链、位置服务、视觉服务等六大板块,业务覆盖湖南、甘肃、贵州等多个省份。 业务挑战 中盾集团基于A…...

【大数据】MapReduce的“内存增强版”——Spark
【大数据】MapReduce的“内存增强版”——Spark 文章脉络 Spark架构 Spark-core SparkConf 和 SparkContext RDD Spark集群 Spark-sql 在大数据时代,数据处理和分析成为企业竞争的重要手段。Hadoop作为大数据处理的基石,其核心组件MapReduce在众多…...

o1模型:引领AI技术在STEM领域的突破与应用
o1模型是OpenAI最新推出的大型语言模型,它在多个领域展现出了卓越的能力,被认为是AI技术发展的一个重要里程碑。以下是对o1模型的详细介绍和分析: o1模型的简介和性能评估 o1模型在物理、化学、生物学等领域的基准任务上达到了博士生水平&…...

数据库系统 第57节 数据库迁移
数据库迁移是一个复杂的过程,涉及到将数据从一个数据库系统转移到另一个数据库系统。这个过程通常需要仔细规划和执行,以确保数据的完整性和可用性。以下是数据库迁移的一些关键方面: 数据迁移工具: 这些工具可以帮助自动化迁移过…...

【主机入侵检测】Wazuh规则详解
前言 Wazuh 规则是一组用XML格式编写的条件,它们定义了应该如何解释日志数据。这些规则由Wazuh Manager使用,用于在日志消息中检测特定的模式或行为,并相应地生成警报或响应。它们在威胁检测中扮演着至关重要的角色,因为它们允许系…...

redis有序集合写入和求交集的速度
背景 团队小伙伴做了一个需求。大概的需求是有很多的图片作品,图片作品有一些类别,每个人进入到每个类别的作品业,根据权重优先查看权重最高的的作品,权重大概是基于每个人对该作品的浏览计算,浏览过的作品放在最后展…...

微服务之服务注册与发现:Etcd、Zookeeper、Consul 与 Nacos 比较
在微服务架构中,服务注册与发现是实现服务动态管理和负载均衡的关键。本文将对四款主流的服务注册与发现工具——Etcd、Zookeeper、Consul、Nacos进行深入对比,从功能、性能、一致性、生态集成、应用场景等多个维度展开分析,帮助您选择最适合…...

桥接模式详解和分析JDBC中的应用
🎯 设计模式专栏,持续更新中, 欢迎订阅:JAVA实现设计模式 🛠️ 希望小伙伴们一键三连,有问题私信都会回复,或者在评论区直接发言 桥接模式 文章目录 桥接模式桥接模式的四个核心组成:…...

【python - 函数】
一、交互式会话 在与 Python 的交互式会话中,你可以在提示符 >>> 后键入一些 Python 代码,Python 解释器会读取并执行你键入的各种命令。 要启动交互式会话,请在终端 (Mac/Unix/Linux) 中键入 python3 或在 Windows 中打开 Python…...

scipy中稀疏矩阵特征值问题概述
在Python的scipy库中,这三种算法——ARPACK、LOBPCG、和AMG——都是用于求解稀疏矩阵特征值问题的数值方法。它们各自有不同的特性和适用场景,以下是详细说明: 1. ARPACK (Arnoldi Package) ARPACK(Arnoldi Package)…...

浅谈线性表——队列
文章目录 一、什么是队列?二、队列底层三、自我实现一个队列3.1、链式存储3.1.1、单向链表实现队列的实现代码3.1.2、双向链表实现队列的实现代码 3.2、顺序存储3.2.1、循环队列的实现代码 一、什么是队列? 队列是只允许在一端进行插入数据操作…...

2-94 基于matlab的最佳维纳滤波器的盲解卷积算法
基于matlab的最佳维纳滤波器的盲解卷积算法。维纳滤波将地震子波转换为任意所需要的形态。维纳滤波不同于反滤波,它是在最小平方的意义上为最 佳。基于最佳纳滤波理论的滤波器算法是莱文逊(Wiener—Levinson)算法。程序提供了4种子波和4种期望输出:零延迟…...

【提示词】浅谈GPT等大模型中的Prompt
Prompt是人工智能(AI)提示词,是一种利用自然语言来指导或激发人工智能模型完成特定任务的方法。在AI语境中,Prompt是一种自然语言输入,通常指的是向模型提出的一个请求或问题,这个请求或问题的形式和内容会…...

最强AI照片说话Windows一体包下载地址,口型合成音频驱动图片,免安装,下载即用
照片数字一键整合包:点击下载 一键安装包,简单一键启动,即刻使用,秒级体验。 目前效果最好的音频驱动图片说话的软件,比sadtalker、MuseTalk更清晰,效果更好,可以作为DID heygen的开源平替。原…...

Windows下使用cmake编译OpenCV
Windows下使用cmake编译OpenCV cmake下载OpenCV下载编译OpenCV cmake下载 下载地址:https://cmake.org/download/ 下载完成,点击选择路径安装即可 OpenCV下载 下载地址:https://github.com/opencv/opencv/releases/tag/4.8.1因为我们是编译…...

设计模式---中介者模式
设计模式---中介者模式 定义与设计思路中介者模式的引入:机场控制塔中介者模式的设计框架 定义与设计思路 定义:用一个中介对象来封装一系列对象交互。中介者使各对象不需要相互引用,从而使其耦合松散,而且可以独立地改变它们之间…...

六氟化硫密度微水在线监测配套5孔M12格兰头航空插头插座
我们将为大家介绍如何使用六氟化硫密度微水在线监测配套5孔M12格兰头连接器。在本教程中,我们将向您展示简单易懂的步骤,让您轻松掌握。 所需材料: 1. 六氟化硫密度微水在线监测器 2. 5孔M12格兰头连接器 3. 电源线 4. 符合要求的电缆 5…...

linux -L4.linux 暂停和启动进程
接第3课,L3 第3课-查看进程 通过端口号,查看对应的进程 netstat -tulnp | grep :9513暂停这个进程 Kill -STOP 5376重启这个进程 Kill -CONT 5376要查看特定PID对应的端口,你可以使用netstat命令结合grep工具来过滤输出。以下是一个基于L…...

Java多线程编程-基础篇
多线程相关的概念 并发 并发是指在同一时间段内,两个或多个任务在同一个处理器上交替执行,使得在宏观上看起来像是同时进行。并发是通过快速切换任务来模拟同时执行的效果,实际上在任何一个时刻点上只有一个任务在执行。 也就是说࿰…...

【极限、数学】 NOIP 2018 提高组初赛试题 第 7 题详解(线段长度期望)
在一条长度为 1 1 1 的线段上随机取两个点,则以这两个点为端点的线段的期望长度是( )。 考虑将一个线段上平均分布有 n ( n ≥ 2 ) n(n\geq 2) n(n≥2) 个节点,其中首尾均有一个节点,那么我们就将一个线段均分为 n…...

《论网络安全体系设计》写作框架,软考高级系统架构设计师
论文真题 随着社会信息化的普及,计算机网络已经在各行各业得到了广泛的应用。目前,绝大多数业务处理几乎完全依赖计算机和网络执行,各种重要数据如政府文件、工资档案、财务账目和人事档案等均依赖计算机和网络进行存储与传输。另一方面&…...

这款开源的通用PDF处理神器,功能炸裂!
今天分享一款以PDF为中心的多功能办公学习工具箱软件,包含四大板块功能:PDF实用工具箱、Anki制卡神器、Anki最强辅助、视频笔记神器,软件功能众多且强大,熟练运用可以大幅提高办公和学习效率,绝对是您不可多得的效率神…...