【计算机组成原理】详细解读带符号整数在计算机中的运算

有符号整数的运算

  • 导读
  • 一、补码的优势
  • 二、补码的加法运算
  • 三、补码的减法运算
  • 四、原码、反码、补码的特性
  • 结语

封面

导读

大家好,很高兴又和大家见面啦!!!

经过前面的介绍,我们已经初步认识了有符号整数的三种表示形式:

  • 原码——用机器数的最高位表示符号,其余位表示数值。
    • 符号位为0,表示正数
    • 符号位为1,表示负数
    • n n n 位机器数对应的取值范围: − ( 2 n − 1 − 1 ) ~ 2 n − 1 − 1 -(2^{n-1}-1)~2^{n-1}-1 (2n11)2n11
  • 反码——原码符号位不变,数值位按位取反。
    • 反码常用于数码变换的中间表示形式
    • n n n 位机器数对应的取值范围: − ( 2 n − 1 − 1 ) ~ 2 n − 1 − 1 -(2^{n-1}-1)~2^{n-1}-1 (2n11)2n11
  • 补码——反码+1
    • 有符号整数在计算机中的存储形式
    • 补码的符号位参与运算
    • n n n 位机器数对应的取值范围: − 2 n − 1 ~ 2 n − 1 − 1 -2^{n-1}~2^{n-1}-1 2n12n11

在接下来的内容中,我们将会进一步的深入探讨原、反、补这三种表现形式的内容。今天我们将会从最简单的有符号整数的运算开始介绍。

在前面我们有提到过,有符号整数在通过原码进行运算时,会存在一些问题:

  • 两个不同符号的加法运算(或同符号的减法运算),需要完成三步运算:
    • 比较两个值的绝对值大小
    • 用绝对值大的数减去绝对值小的数
    • 给运算结果选择合适的符号
  • 两个同符号的加法运算(或不同符号的减法运算),需要完成三步运算:
    • 减法运算改为加法运算,即加上被减数的相反数
    • 从右到左,数值位逐位相加,符号位不参与运算
    • 符号位取左操作数的符号

可以看到,同样是加减法运算,仅仅因为加减法的对象不同,其运算的方式却有差异,为了提高运算的效率,降低硬件的开发成本,于是便有了补码,那么在有符号的整数中,其补码形式又是如何进行运算的呢?下面我们就一起来探讨一下补码的加减运算;

一、补码的优势

在原码的运算中,由于机器数的最高位表示的是符号位,并且符号位不参与运算,因此实际在进行运算的只有除符号位以外的数值位,而运算结果的符号,还需要根据结果进行判断,这就导致其运算过程变的及其复杂;

但是在补码的运算中符号位要参与运算,此时我们就不需要再去考虑结果的符号,正常的完成运算后,运算结果的符号也就同时确定了下来,这样就大大降低了运算的难度。

而且真值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} 2n1

从这几点来看,有符号整数以补码的形式进行存储,并通过补码运算的优势还是很明显的。

二、补码的加法运算

有符号整数的补码加法规则很简单,从右到左,依次相加,逢二进一,如下所示:

补码的加法
可以看到,整个过程并不复杂,并且这个过程有细心的朋友就会发现,除了后续的补码转换成原码之外,整个加法运算的过程是和无符号整数的加法是一样的。那么这个补码的运算是否和无符号整数的运算有联系呢?

在无符号整数的运算中我们就有介绍过,计算机中,减法电路的造价会高于加法电路的造价,因此,为了节约开发成本,计算机中的减法都会以加法的形式来完成,这里就包括有符号整数的加法。

那在有符号整数中的减法是如何实现的呢?下面我们就来继续探讨一下有符号整数的减法;

三、补码的减法运算

有符号整数的减法实际上和无符号整数的减法一样,在式子 A − B A-B AB 中都是选择将减数 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 000000
  • 最大值:
    • 原码: 2 n − 1 − 1 2^{n-1}-1 2n11
    • 反码: 2 n − 1 − 1 2^{n-1}-1 2n11
    • 补码: 2 n − 1 − 1 2^{n-1}-1 2n11
    • 无符号整数: 2 n − 1 2^n-1 2n1
  • 最小值:
    • 原码: − ( 2 n − 1 − 1 ) -(2^{n-1}-1) (2n11)
    • 反码: − ( 2 n − 1 − 1 ) -(2^{n-1}-1) (2n11)
    • 补码: − 2 n − 1 -2^{n-1} 2n1
    • 无符号整数: 0 0 0
  • 取值范围:
    • 原码: − ( 2 n − 1 − 1 ) ~ 2 n − 1 − 1 -(2^{n-1}-1)~2^{n-1}-1 (2n11)2n11
    • 反码: − ( 2 n − 1 − 1 ) ~ 2 n − 1 − 1 -(2^{n-1}-1)~2^{n-1}-1 (2n11)2n11
    • 补码: − 2 n − 1 ~ 2 n − 1 − 1 -2^{n-1}~2^{n-1}-1 2n12n11
    • 无符号整数: 0 ~ 2 n − 1 0~2^n-1 02n1
  • 运算方式:
    • 原码:数值位运算,符号位不参与运算
    • 反码:不参与运算
    • 补码:数值位符号位都参与运算
    • 无符号整数:所有二进制位都参与运算

结语

今天的内容到这里就全部结束了,在下一篇内容中我们将介绍《移码》的相关内容,大家记得关注哦!如果大家喜欢博主的内容,可以点赞、收藏加评论支持一下博主,当然也可以将博主的内容转发给你身边需要的朋友。最后感谢各位朋友的支持,咱们下一篇再见!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/53731.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NPU 与 GPU 相比,有什么差别?| 技术速览

编者按: 随着2024年被业界誉为“AI PC元年”,各大笔记本电脑厂商纷纷推出搭载NPU的全新AI PC,而在介绍产品性能时,“NPU”一词频频被提及。但NPU和我们所熟知的GPU之间的区别究竟是什么? 我们今天为大家分享的这篇文章…

电水壶自复位热断循环测试合规性

在家用电器安全标准中,电水壶的安全性尤为重要,尤其是涉及热保护装置的部分。电水壶在日常使用中频繁接触高温水,极端情况下,温度可能异常升高。因此,为了确保用户的安全,热保护装置必须可靠工作。本文将探讨自复位热断路器(TCO)在电水壶中的作用,以及在100次循环测试…

如何在 Selenium 中获取网络调用请求?

引言 捕获网络请求对于理解网站的工作方式以及传输的数据至关重要。Selenium 作为一种 Web 自动化工具,可以用于捕获网络请求。本文将讨论如何使用 Selenium 在 Java 中捕获网络请求并从网站检索数据。 我们可以使用浏览器开发者工具轻松捕获网络请求或日志。大多数现代 Web…

creating chat agent with langchain and openai getting no attribute error

题意: 使用 LangChain 和 OpenAI 创建聊天代理时遇到“没有属性错误”(Getting "no attribute" error when creating a chat agent with LangChain and OpenAI) 问题背景: Im trying to test a chat agent using the …

房产销售系统|基于java和vue的房产销售系统(源码+数据库+文档)

房产销售|房地产|卖房系统 目录 基于java和vue的房产销售系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师,…

95分App全程正品保障,赋能闲置消费新风尚

在当今快节奏、高消费的时代,闲置经济正以前所未有的速度崛起,成为新一代消费者的新宠。越来越多的年轻人开始拥抱闲置商品,将“断舍离”与“物尽其用”的理念融入日常生活,催生了闲置交易市场的空前繁荣。曾几何时,购…

【iOS】UIViewController的生命周期

UIViewController的生命周期 文章目录 UIViewController的生命周期前言UIViewController的一个结构UIViewController的函数的执行顺序运行代码viewWillAppear && viewDidAppear多个视图控制器跳转时的生命周期pushpresent 小结 前言 之前对于有关于UIViewControlller的…

补:在Spring Boot 当中使用 Thymeleaf 视图解析器

补&#xff1a;在Spring Boot 当中使用 Thymeleaf 视图解析器 想要在 Spring Boot 当中使用 Thymeleaf 视图&#xff0c;就需要导入相关的 jar 依赖。在 pom.xml 文件中配置 。 <!-- 引入 thymeleaf-start ,项目会自动完成配置&#xff0c;--><dependency>…

网络操作系统项目

部署与管理Active Directory 项目基础知识 活动目录是一种由微软开发的网络服务&#xff0c;用于在网络环境中管理和组织用户、计算机和其他网络资源。它是基于目录服务的概念&#xff0c;类似于电话号码簿。 活动目录主要用于集中管理网络中的用户帐户、组织单位、计算机、打…

统一建模语言UML之类图(Class Diagram)(表示|关系|举例)

文章目录 1.UML2.Class Diagram2.1 类图的表示2.2 类间的关系2.2.1 关联2.2.2 聚合2.2.3 组合2.2.4 泛化&#xff08;继承&#xff09;2.2.5 实现&#xff08;接口实现&#xff09;2.2.6 依赖 2.3 类图的作用 参考&#xff1a;Class Diagram | Unified Modeling Language (UML)…

大数据新视界 --大数据大厂之Flink强势崛起:大数据新视界的璀璨明珠

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

electron react离线使用monaco-editor

1.安装monaco-editor/react和monaco-editor pnpm i monaco-editor/react pnpm i monaco-editor 2.引入并做monaco-editor离线配置 import Editor, { DiffEditor, useMonaco, loader } from monaco-editor/react import * as monaco from monaco-editor import editorWorke…

软考 -- 软件设计师 -- 二轮复习(3) -- 数据结构(持续更新)

软考 – 软件设计师 – 二轮复习(3) – 数据结构(持续更新) 文章目录 软考 -- 软件设计师 -- 二轮复习(3) -- 数据结构(持续更新)前言一、时间、空间复杂度二、递归式时间复杂度三、线性表四、栈五、栈和队列六、串七、朴素模式匹配八、KMP模式匹配九、数组十、矩阵十一、树、二…

HarmonyOS开发实战( Beta5.0)自定义装饰器实践规范

介绍 本示例介绍通过自定义装饰器在自定义组件中自动添加inspector (布局回调)方法并进行调用。 效果图预览 不涉及 使用说明 在自定义组件上添加自定义装饰器CallbackObserver&#xff0c;并根据参数设置对应的方法名和需要绑定的组件的ID。编译工程&#xff0c;可以根据…

四款音频剪辑软件免费使用,你更pick哪一个?

视频剪辑知随着软件的不断更新&#xff0c;入门门槛和操作难度也随之变得越来越低&#xff0c;但是依然有不少人不知道剪辑视频要用什么工具&#xff0c;作为一个视频剪辑爱好者&#xff0c;我尝试过不少编辑软件&#xff0c;今天就来跟大家分享一下四款视频剪辑软件在实际使用…

通用四期ARM架构银河麒麟桌面操作系统V10【安装、配置FTP客户端】

一、操作环境 服务端&#xff1a;银河麒麟桌面操作系统V10SP1 客户端&#xff1a;银河麒麟桌面操作系统V10SP1 二、服务端配置 注&#xff1a;以下命令均在终端执行 鼠标点击桌面右键&#xff0c;选择打开终端 操作步骤&#xff1a; 1、安装vsftpd软件&#xff1a;如果提…

深入理解TCP三次握手

在网络通信中&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一个可靠的、面向连接的协议&#xff0c;它保证了数据包的顺序和完整性。为了建立一个稳定的连接&#xff0c;TCP 使用了一个被称为 三次握手&#xff08;Three-W…

滑动窗口(1)_长度最小的子数组

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 滑动窗口(1)_长度最小的子数组 收录于专栏【经典算法练习】 本专栏旨在分享学习C的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. …

一款高效、简洁的帧动画生成工具

在现代网页设计和移动应用开发中&#xff0c;帧动画是一种常见的动画实现方式&#xff0c;它通过连续显示一系列静态图片来模拟动画效果。然而&#xff0c;手动创建和管理这些帧动画图片不仅耗时费力&#xff0c;而且效率低下。为此&#xff0c;gka 应运而生&#xff0c;它是一…

Java学习Day41:骑龙救!(springMVC)

springMVC与sevlet都是对应表现层web的&#xff0c;但是越复杂的项目使用SpringMVC越方便 基于Java实现MVC模型的轻量级web框架 目标&#xff1a; 小案例&#xff1a; 1.导入依赖 spring-context: 提供 Spring 框架的核心功能&#xff0c;如依赖注入、事件发布和其他应用上…