2.2 定点加法 减法运算

news2024/11/28 4:52:06

 

学习前的建议 

以下是一些学习定点加法和减法运算的建议:

  1. 掌握定点数的表示方法:在进行定点加法和减法运算之前,需要先了解定点数的表示方法,包括定点数的位数、小数点位置以及符号位等信息。

  2. 理解定点加法和减法的原理:定点加法和减法的原理和补码加法的原理类似,但是需要考虑到定点数的位数和小数点位置等因素。建议先了解定点数的表示方法,再通过实例演练加减法的过程,掌握定点加法和减法的基本原理。

  3. 学习进位和溢出的处理方法:在进行定点加法和减法运算时,需要注意处理进位和溢出的情况,例如,当两个正数相加结果超出了定点数的表示范围时,会产生溢出;当两个负数相加结果超出了定点数的表示范围时,同样也会产生溢出。因此,建议学习进位和溢出的处理方法,以保证运算结果的准确性。

  4. 利用模拟器和实验平台进行实践:定点加法和减法的原理比较抽象,建议通过模拟器和实验平台进行实践,例如,使用 Verilog HDL 或者其他模拟器进行定点加法和减法的实现,加深对定点加法和减法的理解和掌握。

总之,学习定点加法和减法运算需要深入理解定点数的表示方法、加法和减法的原理,同时也需要通过实践加深对知识点的掌握,不断练习和巩固。

学习目标:

在学习计算机组成原理中,我希望能够深入理解定点加法和减法运算的原理和方法,掌握定点数的表示方法,学会处理进位和溢出的情况,同时也希望能够通过实践加深对知识点的理解和掌握。具体来说,我计划在接下来的一个月内,完成以下学习目标:

  1. 掌握定点数的表示方法,包括定点数的位数、小数点位置以及符号位等信息。

  2. 理解定点加法和减法的原理和方法,掌握处理进位和溢出的情况。

  3. 学习使用 Verilog HDL 或者其他模拟器进行定点加法和减法的实现,加深对知识点的理解和掌握。

  4. 进行一些练习和实验,例如,实现定点加法和减法的模块,验证其正确性,并进行一些性能测试等。

  5. 最后,总结和复习所学的知识点,确保对定点加法和减法的原理和方法有一个深入的理解和掌握。

2.2.1 补码加法:

 我的理解:

补码加法是计算机中常用的一种加法方式,可以快速实现整数的加法运算。补码加法的基本原理是:将两个补码相加,然后判断是否有进位或溢出,并根据情况进行进一步处理。下面,我将逐步讲解补码加法的实现步骤:

  1. 将两个补码的符号位进行比较,如果符号位相同,则表示两个数的加法结果为同号,否则表示两个数的加法结果为异号。例如,如果要计算 5 + (-3),则需要将 5 和 -3 转换成对应的补码形式,然后比较它们的符号位,因为 5 的符号位为 0,-3 的符号位为 1,所以这两个数的加法结果为异号。

  2. 将两个补码进行相加,这个过程和普通的加法运算类似,但需要注意的是,在计算加法时,需要将符号位也进行相加,因为补码的符号位也代表了数值的正负。例如,计算 5 + (-3) 的补码时,需要将 5 和 -3 的补码进行相加,得到 00101 + 11011 = 00000(忽略掉最高位的进位),这个结果的补码为 11111,表示 -8。

  3. 判断是否有进位或溢出。如果两个正数相加得到的结果超出了最大表示范围,或者两个负数相加得到的结果超出了最小表示范围,就会产生溢出。例如,如果计算 127 + 1,则会产生溢出,因为最大表示范围为 01111111,加 1 后会得到 10000000,超出了最大表示范围。如果一个正数和一个负数相加,但没有产生进位,也就是说,它们的绝对值之和小于等于最大表示范围,但符号位不一致,也会产生溢出。

  4. 根据产生的进位或溢出进行进一步处理。如果产生了进位,需要将最高位的进位加到计算结果中;如果产生了溢出,则需要将溢出的信息记录下来,并进行进一步的处理,例如,抛弃溢出的位或者将其作为错误信息返回。

总之,补码加法是计算机中常用的一种加法方式,能够快速实现整数的加法运算。补码加法的实现过程包括符号位比较、补码相加、进位溢出处理等步骤。

 

前置知识储备

理解补码加法的概念需要先了解一些基本的概念,如原码、反码、补码等。

在计算机中,数据一般以二进制的形式存储。原码是最基本的表示方式,直接用二进制表示数值的大小和符号,其中最高位表示符号位,0 表示正数,1 表示负数。例如,十进制数 5 的原码是 00000101,十进制数 -3 的原码是 10000011。

反码是将原码中的符号位不变,其余位按位取反得到的结果。例如,十进制数 5 的反码是 00000101,十进制数 -3 的反码是 11111100。

补码是将反码加 1 得到的结果,其中最高位仍然表示符号位。补码是计算机中最常用的一种数值表示方式,因为它能够将减法转换为加法,从而简化计算机的设计。例如,十进制数 5 的补码是 00000101,十进制数 -3 的补码是 11111101。

补码加法是在补码的基础上进行的加法运算。在补码加法中,相同符号的两个数的加法运算与原码加法一致,而不同符号的两个数的加法则需要通过符号位比较和进位处理来实现。

因此,理解补码加法的概念需要理解原码、反码、补码等数值表示方式,以及它们之间的相互转换规则。在了解这些基本概念的基础上,理解补码加法就变得相对简单了。

 

 

2.2.2 补码的减法

补码减法可以通过补码加法来实现。其基本思路是,将减数取反后加上被减数,即可得到减法的结果。

具体来说,设要计算的减法表达式为 A-B,其中 A 和 B 均为补码表示的数。我们可以先将 B 取反,得到 -B 的补码表示。然后,将 A 和 -B 作为两个补码数进行加法运算,即计算 A + (-B) 的补码表示。最后,将结果转换回原码表示,就得到了减法的结果。

以下是一个例子,计算 6-3 的补码表示:

  1. 计算被减数 6 的补码表示:+6 = 00000110
  2. 计算减数 3 的补码表示:+3 = 00000011,-3 的补码表示为 11111101
  3. 将 A = 00000110 和 -B = 11111101 作为两个补码数进行加法运算:A + (-B) = 00000110 + 11111101 = 00000011,即 -3 的补码表示
  4. 将 -3 的补码表示转换回原码表示,得到减法结果为 -3

因此,补码减法实际上就是将减法转换为加法,通过将减数取反后加上被减数来实现。这样可以避免减法的复杂性,简化计算机的设计,同时还能够有效地处理溢出问题。

 2.2.3 溢出概念与检测方法

在计算机中进行数值计算时,当运算结果超出了数据类型所能表示的范围,就会发生溢出(overflow)现象。溢出可能会导致程序崩溃、结果不准确、数据损坏等问题,因此在编写程序时需要注意溢出的情况,并进行相应的检测和处理。

下面是一些常见的检测溢出的方法:

  1. 符号位检查法:对于有符号整数,将运算结果的符号位与操作数的符号位进行比较,如果不一致,则发生了溢出。

  2. 位运算法:对于无符号整数,将运算结果右移数位,然后与操作数进行比较,如果不一致,则发生了溢出。

  3. 加法溢出检测法:对于加法运算,当两个正数相加得到的结果小于其中一个操作数时,或者当两个负数相加得到的结果大于其中一个操作数时,就会发生溢出。

  4. 减法溢出检测法:对于减法运算,当一个正数减去一个负数得到的结果小于其中一个操作数的绝对值时,或者当一个负数减去一个正数得到的结果大于其中一个操作数的绝对值时,就会发生溢出。

  5. 乘法溢出检测法:对于乘法运算,当两个有符号整数相乘得到的结果超出了数据类型所能表示的范围时,就会发生溢出。

  6. 浮点数溢出检测法:对于浮点数,当结果的指数部分超过了表示范围时,就会发生溢出。

以上仅是一些常见的检测溢出的方法,具体应根据情况选择合适的方法进行检测。在实际编写程序时,可以使用语言提供的内置函数或库函数来检测溢出,也可以自行编写相应的检测代码。同时,在发现溢出时,应根据具体情况进行相应的处理,如抛出异常、返回错误码等。

 我的理解:

溢出是指在进行数值计算时,结果超出了所能表示的范围,导致计算机无法准确表示运算结果的情况。比如,在使用8位二进制补码表示有符号整数时,其范围为-128~127,如果两个-100的有符号整数相加,由于其结果为-200,超出了所能表示的范围,就会发生溢出。

理解溢出概念需要理解数据类型的表示范围和计算机运算方式。对于有符号整数来说,通常使用补码进行表示和运算。在进行加减法运算时,需要考虑符号位的进位和借位问题。而在进行乘法和除法运算时,则需要考虑数据溢出的问题。

发生溢出后,计算机通常会采取一些处理方式,如截断、舍入、抛出异常等,具体取决于编程语言和计算机体系结构。在实际编程中,需要注意避免溢出情况的发生,对于可能发生溢出的运算,应该进行溢出检测并进行相应的处理。

 

 2.2.4 基本的二进制加法/减法器

 

二进制加法器和减法器是计算机中最基本的电路之一,用于执行二进制数的加减运算。这些电路可以被组合在一起,构建更复杂的算术逻辑电路,如乘法器、除法器等。

二进制加法器的输入是两个二进制数和一个进位标志位(Carry-In),输出是一个二进制和结果和一个进位输出(Carry-Out)。二进制加法器可以使用半加器(Half-Adder)和全加器(Full-Adder)组成。

半加器只能处理两个二进制数的最低位加法,输出结果和一个进位位。全加器则可以处理两个二进制数的任意位加法,包括进位位,输出结果和一个进位位。

二进制减法器与加法器类似,但是需要进行补码运算来实现减法。补码减法可以通过将被减数取反并加1,然后与减数相加来实现。减法器的输入是两个二进制数和一个借位标志位(Borrow-In),输出是一个二进制差和一个借位输出(Borrow-Out)。减法器可以使用半减器(Half-Subtractor)和全减器(Full-Subtractor)组成。

半减器只能处理两个二进制数的最低位减法,输出结果和一个借位位。全减器则可以处理两个二进制数的任意位减法,包括借位位,输出结果和一个借位位。

以上是二进制加法器和减法器的基本概念和构成。在实际应用中,可以通过组合多个半加器或半减器,以及多个全加器或全减器,来实现更复杂的算术运算。

疑问 什么是行波进位加减器?

行波进位加法器(Ripple Carry Adder)是一种常见的二进制加法器,由多个全加器组成。它的原理是将两个二进制数的每一位相加,然后将进位输出给下一位进行相加。这种加法器的关键是产生进位信号,因为没有进位信号,后续的加法器无法正确计算出结果。

行波进位加法器的优点是简单易于实现,但是它的缺点是速度较慢,因为每一位的加法需要等待上一位的进位输出。因此,行波进位加法器的速度受到位数的限制,而且随着位数的增加,它的延迟会成倍增加。为了提高速度,可以采用更快的加法器结构,例如Carry Lookahead Adder(CLA)和Carry Select Adder(CSA)等。

 

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

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

相关文章

nginx配置sh脚本远程执行一键安装

背景 本地多机重复操作某些shell指令,分步执行,很耗费时间, 需要远程一键部署,傻瓜化运维,更为通用安装。 即参考docker通用安装 sudo curl https://get.docker.com | sh - # sudo python3 -m pip install docker-co…

SignalR实现简单的Web端实时通讯,跳过WebSocket验证,Swagger加锁后不能访问接口,Script setup不支持动态绑定

版本.Net6Vue3Element-Plus 问题 Swagger加锁后不能访问接口 (看第三步)跳过WebSocket验证 (看第四步里面)添加自定义接受方法 (看第四步)不能使用 第一步、下载包 后端: 前端:…

Android内存优化场景

1、集合类 内存泄露原因 集合类 添加元素后&#xff0c;仍引用着 集合元素对象&#xff0c;导致该集合元素对象不可被回收&#xff0c;从而 导致内存泄漏实例演示 // 通过循环申请Object 对象 & 将申请的对象逐个放入到集合List List<Object> objectList new Arra…

VBA-自定义面板,使用SQL查询Excel数据

需求 定制插件&#xff0c;实现用户打开任意一个工作簿&#xff0c;写sql对Excel中的数据进行查询 案例sql需求场景&#xff1a; 需求 筛选日期小于’2023-4-24’&#xff0c;按group分区&#xff0c;求和各分组下的销售额&#xff0c;返回结果集新建工作表写入 数据源 现…

Docker-compose 启动 lnmp 开发环境

GitHub传送阵 docker-lnmp 项目帮助开发者快速构建本地开发环境&#xff0c;包括Nginx、PHP、MySQL、Redis 服务镜像&#xff0c;支持配置文件和日志文件映射&#xff0c;不限操作系统&#xff1b;此项目适合个人开发者本机部署&#xff0c;可以快速切换服务版本满足学习服务新…

国产开源项目管理软件ZenTao

本文应网友 ukiyoec 要求而写&#xff1b; 什么是禅道 &#xff1f; 禅道 (ZenTao)是国产开源项目管理软件。它集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体&#xff0c;是一款专业的研发项目管理软件&#xff0c;完整覆盖了研发项目管理的核心流程。禅…

2023-Hive性能企业级调优

Hive作为大数据平台举足轻重的框架&#xff0c;以其稳定性和简单易用性也成为当前构建企业级数据仓库时使用最多的框架之一。 但是如果我们只局限于会使用Hive&#xff0c;而不考虑性能问题&#xff0c;就难搭建出一个完美的数仓&#xff0c;所以Hive性能调优是我们大数据从业…

前端周总结

在vue里面引入ts文件报错&#xff1a; An import path cannot end with a .ts extension. Consider importing xx.js instead. 方法一&#xff08;最快&#xff09; 把引入的xx.ts后缀删除 方法二 # 在tsconfig.json中加入以下配置 "baseUrl": ".", &quo…

Oracle LiveLabs实验:DB Security - Data Masking and Subsetting (DMS)

概述 本实验介绍了适用于 Enterprise Manager 的 Oracle 数据屏蔽和子集 (DMS) 包的各种特性和功能。 它使用户有机会学习如何配置这些功能&#xff0c;以便在非生产环境中保护他们的敏感数据。 此实验申请地址在这里&#xff0c;时间为60分钟。 本实验也是DB Security Adva…

String AOP

AOP AOP(Aspect Object programmar) 面向切面编程&#xff0c;它是对某一类问题的统一处理&#xff0c;而StringAOP就是AOP思想的一种具体实现就像Ioc和DI。 AOP组成 切面(Aspect) 切⾯&#xff08;Aspect&#xff09;由切点&#xff08;Pointcut&#xff09;和通知&#x…

论文阅读笔记《Grounded Action Transformation for Robot Learning in Simulation》

Grounded Action Transformation for Robot Learning in Simulation 发表于AAAI 2017 仿真机器人学习中的接地动作变换 Hanna J, Stone P. Grounded action transformation for robot learning in simulation[C]//Proceedings of the AAAI Conference on Artificial Intellig…

Linux中的阻塞机制

我们知道在字符设备驱动中&#xff0c;应用层调用read、write等系统调用终会调到驱动中对应的接口。 可以当应用层调用read要去读硬件的数据时&#xff0c;硬件的数据未准备好&#xff0c;那我们该怎么做&#xff1f; 一种办法是直接返回并报错&#xff0c;但是这样应用层要获得…

linux通配符和正则表达式深层解析...

目录&#xff1a; (一)了解通配符和正则的作用 (二)通配符的使用 (三)正则表达式的使用 (四)扩展正则表达式的使用 (一)了解通配符和正则的作用 (1.1)在我们日常的工作中&#xff0c;我们都会使用到通配符或者正则表达式。通配符是一种特殊语句&#xff0c;主要有星号(*)和问号…

交换机和路由器到底有什么区别???

我&#xff1a;度娘度娘&#xff0c;交换机和路由器的区别是什么呢&#xff1f; 度娘&#xff1a;一个工作在第二层数据链路层&#xff0c;一个工作在第三层网络层。 我&#xff1a;哈&#xff1f;那工作在不同层会有什么区别&#xff1f;为什么要工作在不同层&#xff1f; …

2023五一数学建模A题完整思路

已更新五一数学建模A题思路&#xff0c;文章末尾获取&#xff01; A题完整思路&#xff1a; A题是一个动力学问题&#xff0c;需要我们将物理学概念运用到实际生活中&#xff0c;我们可以先看题目 问题1&#xff1a; 假设无人机以平行于水平面的方式飞行&#xff0c;在空中投…

Windows11安装sqlserver2012失败后解决方案

首先卸载 WinR打开运行输入services.msc查看所有服务/或者我的电脑管理找到服务列表/任务管理器进入服务列表&#xff0c;停止所有与Sql Server有关的服务&#xff0c;如下&#xff1a; 打开控制面板-卸载sqlserver所有相关软件&#xff1b; 删除SQL Server相关注册表&#…

【观察】中国软件行业进入“重构期”,看浪潮海岳如何“开新局”

众所周知&#xff0c;改开四十多来年&#xff0c;中国软件产业在经历了萌芽与低谷、摸索与转型后&#xff0c;逐步进入了快速发展期。特别是过去几年&#xff0c;在新的发展格局&#xff0c;信创替代的进程中&#xff0c;整个中国软件业更是加速进入了全新的“重构期”。 在此过…

Unity API详解——Quaternion类

Quaternion类又称四元数&#xff0c;由x、y、z和w这4个分量组成&#xff0c;属于struct类型。在Unity中&#xff0c;用Quaternion来存储和表示对象的旋转角度。Quaternion的变换比较复杂&#xff0c;对于GameObject一般的旋转及移动&#xff0c;可以用Transform中的相关方法实现…

CH32V307环境参数在线监测系统(一)

CH32V307环境参数在线监测系统是以CH32V307VCT6为核心&#xff0c;由ESP8266模块、DHT11温湿度传感器模块、TFT LCD显示屏组成。系统实物图如下所示&#xff1a; 系统功能主要有RTC实时时钟、WIFI网络授时、DHT11温度测量、温湿度数据实时上传到onenet平台、屏幕定时刷新等功能…

在Docker上安装和运行MySQL容器(纯步骤)

在Docker上安装和运行MySQL步骤 本文章只有操作步骤&#xff0c;没有原理解释&#xff0c;只是在学习当中提醒自己安装步骤。 第一步&#xff1a;从远程仓库拉取MySQL镜像 1.从远程仓库搜索mysql镜像 docker search mysql2.pull拉取镜像 这里我选择的是mysql的5.7版本 docker…