计算机组成原理==初识二进制运算
计算机组成原理
计算机算术概要
计算机算术是计算机组成原理中的一个重要部分,它涉及在计算机硬件中执行基本数学运算的方法和技术。计算机算术不仅包括简单的加减乘除运算,还包括更复杂的操作如浮点运算、位运算等。
1. 基本概念
- 数制:计算机内部通常使用二进制(基数为2)进行运算,但也有八进制(基数为8)、十六进制(基数为16)等形式用于简化表示。
- 补码表示:为了处理负数,计算机通常采用补码形式来表示整数。补码使得加法和减法可以统一成加法操作。
2. 整数运算
- 加法:直接的二进制加法,需要注意溢出问题。
- 减法:通过加上负数的补码实现。
- 乘法:可以通过多次移位和加法实现。
- 除法:可以通过重复的减法或移位和减法实现。
- 取模:除法运算的副产品,得到的是余数。
3. 浮点运算
- IEEE 754标准:定义了浮点数的格式,包括单精度(32位)和双精度(64位)。
- 浮点加减法:需要对齐指数,然后进行尾数的加减。
- 浮点乘除法:指数相加/减,尾数相乘/除,最后调整结果以符合规格化要求。
4. 逻辑运算与位运算
- 逻辑运算:包括AND、OR、NOT等,通常用于条件判断。
- 位运算:包括按位AND、OR、XOR、NOT以及移位操作,这些操作直接作用于数据的二进制位上。
5. 算术逻辑单元(ALU)
- 功能:ALU是CPU的一部分,负责执行所有的算术和逻辑运算。
- 设计:ALU的设计包括多个子模块,每个子模块处理特定类型的运算,例如加法器、多路选择器等。
6. 运算优化
- 并行计算:利用硬件的并行性提高运算速度。
- 流水线技术:将一个长的操作分解为多个小步骤,并让不同阶段同时工作。
- 专用硬件:例如FPU(浮点运算单元)专门用来加速浮点运算。
7. 错误检测与纠正
- 奇偶校验:通过添加额外的位来检测错误。
- 海明码:不仅可以检测错误,还可以纠正单个比特的错误。
8. 特殊情况
- 溢出:当运算结果超出表示范围时发生。
- 下溢:当数值变得太小而无法准确表示时发生。
- 舍入误差:在浮点运算中由于有限精度造成的误差。
计算机算术是计算机科学和工程的基础之一,理解这些概念对于开发高效的软件和设计高性能的硬件都非常重要。随着技术的发展,新的算法和硬件架构不断出现,以进一步提高计算效率和准确性。
二进制的运算
二进制乘法运算
二进制乘法运算遵循与十进制乘法相似的原则,但操作更为简单,因为只涉及0和1两个数字。在二进制中,任何数乘以0的结果是0,任何数乘以1的结果是它本身。当进行多位数相乘时,同样需要考虑位的对齐和进位的问题。
下面是一个简单的二进制乘法实例解析:
假设我们要计算二进制数 1011(等价于十进制的11)与 1101(等价于十进制的13)的乘积。
步骤如下:
1011x 1101________1011 (这是1011 * 1)0000 (左移一位,并且1011 * 0 = 0000)1011 (再左移一位,相当于1011 * 1)+ 1011 (最后左移三位,相当于1011 * 1)
________
10001111
解释每一行:
- 第一行是直接将1011乘以最右边的1。
- 第二行是将1011左移一位(相当于乘以2),然后乘以0,所以结果为0000。
- 第三行再次左移一位(相当于乘以4),这次是乘以1,所以得到1011。
- 第四行则是把1011左移三位(相当于乘以8),同样是乘以1,因此又得到了1011。
然后我们把这些结果加起来,注意要按照二进制加法规则处理进位问题。最终结果是10001111,这个二进制数转换成十进制就是143,确实等于11 * 13。
为了确保正确性,可以将最终的二进制结果转换回十进制来验证:10001111 = 12^7 + 02^6 + 02^5 + 02^4 + 12^3 + 12^2 + 12^1 + 12^0 = 128 + 8 + 4 + 2 + 1 = 143。
这就是一个完整的二进制乘法过程及其实例解析。
二进制补码=原码取反+1
- 二进制补码正数左移一位相当于二倍扩展
- 二进制右移相当于除以2
移位操作
快速乘法
构造逻辑矩阵
二进制除法运算
好的,让我们通过一个非常详细的步骤来展示二进制除法。我们将使用相同的例子:10101100(88)除以1100(12)。这个过程将被分解为多个小步骤,并且每一步都会详细解释。
步骤 1: 设置除法布局
__________1100 | 10101100
步骤 2: 比较并确定商的第一位
- 我们从最左边开始比较,
1010
比1100
小,所以我们需要考虑更多的位数。 - 考虑
10101
,它仍然小于1100
。 - 现在考虑
101011
,它大于1100
,因此我们可以进行第一次减法。
步骤 3: 第一次减法
- 商的第一位是1,因为
101011
可以容纳1100
至少一次。 - 执行减法:
101011 - 1100 = 10011
。 - 将结果写下来:
11100 | 10101100- 1100_______10011
步骤 4: 下移一位并继续比较
- 将余数
10011
向下移动一位,加上下一位数字0
,得到100110
。 100110
大于1100
,所以商的下一位也是1。- 执行减法:
100110 - 1100 = 10110
。 - 更新除法布局:
111100 | 10101100- 1100_______100110- 1100_______10110
步骤 5: 再次下移一位并继续比较
- 将余数
10110
向下移动一位,加上最后一位0
,得到101100
。 101100
大于1100
,所以商的下一位也是1。- 执行减法:
101100 - 1100 = 10000
。 - 更新除法布局:
1111100 | 10101100- 1100_______100110- 1100_______101100- 1100_______10000
步骤 6: 结束条件
- 此时,剩余的
10000
已经不足以再减去1100
了,因此我们停止除法运算。 - 最终的商是
111
(等于十进制的7),余数是10000
(等于十进制的16)。
总结:
- 商是
111
(7) - 余数是
10000
(16)
这就是整个二进制除法的过程,每一步都尽可能地详细展示了。
浮点数的运算
在IEEE 754标准中的运算规则
浮点数运算是计算机科学中的一个重要主题,尤其是在数值计算、科学计算和工程应用中。IEEE 754标准定义了浮点数的表示方法以及运算规则,确保了不同平台之间的一致性。
浮点数的表示
在IEEE 754标准中,浮点数通常以单精度(32位)或双精度(64位)格式存储。一个浮点数由三个部分组成:
- 符号位(S):1位,0表示正数,1表示负数。
- 指数(E):8位(单精度)或11位(双精度),用于表示基数2的幂。
- 尾数(M):23位(单精度)或52位(双精度),用于表示小数部分。
浮点数加减法
浮点数加减法的基本步骤如下:
-
对齐指数:
- 比较两个操作数的指数。
- 将较小指数的操作数的尾数向右移位,直到两个操作数的指数相等。每次右移一位,指数增加1。
-
执行加减法:
- 对齐后的尾数进行加法或减法运算。
- 如果结果的最高位是1,则需要进行规格化处理,即将结果左移一位,并相应地减少指数。
-
规格化:
- 确保结果的尾数在[1, 2)范围内。如果不在这个范围内,需要进行规格化处理。
- 规格化可能涉及多次移位和调整指数。
-
舍入:
- 根据IEEE 754标准选择合适的舍入模式(如向最近偶数舍入)。
- 舍入可能会导致尾数溢出,此时需要再次调整指数。
-
检查异常:
- 检查结果是否为无穷大、NaN(非数字)、下溢或上溢。
浮点数乘除法
浮点数乘除法的基本步骤如下:
-
处理符号位:
- 乘法时,两数符号位异或得到结果的符号位。
- 除法时,被除数符号位与除数符号位异或得到结果的符号位。
-
处理指数:
- 乘法时,两数指数相加。
- 除法时,被除数指数减去除数指数。
-
处理尾数:
- 乘法时,两数尾数相乘。
- 除法时,被除数尾数除以除数尾数。
-
规格化:
- 乘法后,结果尾数可能超过[1, 2)范围,需要右移并增加指数。
- 除法后,结果尾数可能小于1,需要左移并减少指数。
-
舍入:
- 根据IEEE 754标准选择合适的舍入模式。
- 舍入可能会导致尾数溢出,此时需要再次调整指数。
-
检查异常:
- 检查结果是否为无穷大、NaN、下溢或上溢。
舍入模式
IEEE 754标准定义了几种舍入模式:
- 向最近偶数舍入(Round to Nearest, Ties to Even):默认模式,向最近的值舍入;如果距离相等,则舍入到最接近的偶数。
- 向零舍入(Round Toward Zero):总是向零方向舍入。
- 向上舍入(Round Up):总是向正无穷方向舍入。
- 向下舍入(Round Down):总是向负无穷方向舍入。
异常情况
- 无穷大:当结果超出表示范围时。
- NaN:非法操作的结果,例如0/0。
- 下溢:结果太小而无法表示。
- 上溢:结果太大而无法表示。
实际实现
现代处理器通常包含专门的浮点运算单元(FPU)来高效执行这些运算。FPU会优化上述步骤,并且能够处理复杂的算术运算,如三角函数、对数等。
通过理解这些基本原理,你可以更好地掌握浮点数运算的工作方式,并在编写程序时考虑到浮点数运算的精度和性能问题。
相关文章:

计算机组成原理==初识二进制运算
计算机组成原理 计算机算术概要 计算机算术是计算机组成原理中的一个重要部分,它涉及在计算机硬件中执行基本数学运算的方法和技术。计算机算术不仅包括简单的加减乘除运算,还包括更复杂的操作如浮点运算、位运算等。 1. 基本概念 数制:计…...

【machine learning-十-grading descent梯度下降实现】
grading descent 梯度下降参数更新方法 --导数和学习率 从导数项直观理解梯度下降 grading descent 算法就是更新参数,今天来学习下如何更新w和b 梯度下降 还是以线性回归的均方差损失函数如下为例: 损失函数的可视化图如下 : 横轴和纵轴分…...
python网络游戏
import socket import threading 客户端处理函数 def handle_client(client_socket, client_address): print(“[INFO] New connection from: {}”.format(client_address)) # 接收客户端消息并回复 while True:data client_socket.recv(1024).decode(utf-8)if not data:br…...

使用Charles抓包Android App数据
版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ 抓包环境准备 1. 下载安装charles charles下载地址:https://www.charlesproxy.com/latest-release/download.do 2. SSL代理设置 3. http代理和…...

通信工程学习:什么是VM虚拟机
VM:虚拟机 VM虚拟机(Virtual Machine)是一种通过软件模拟的计算机系统,它能够在物理计算机上模拟并运行多个独立的虚拟计算机系统。以下是关于VM虚拟机的详细解释: 一、VM虚拟机的定义与原理 定义: VM虚拟…...

C#环境搭建和入门教程--vs2022之下
目录 1.环境搭建 2.先让程序跑起来 3.C#代码结构 4.变量,输入输出介绍 5.内容输入和类型转换 1.环境搭建 我们的这个c#基础学习主要就是在这个vs2022上面进行的,我们的这个c/c使用的都是这个平台 我们首先检查一下我们的这个环境是不是完全的配置了…...

自定义类型
前言:不知不觉又过了一个礼拜。时间过的还真是快呀。好了废话不多说,今天我们来学习C语言中的结构体,联合体,枚举。 我们都知道C语言中数据类型大致被分为基本类型,自定义类型,指针类型,空类型…...
数仓项目环境搭建
目录 一、安装CentOS 1.1、修改映射关系: 1.2、免密登录: 1.3、关闭防⽕墙: 1.4、修改linux的安全机制: 1.5、修改yum源: 二、安装JDK 2.1、创建文件夹: 2.2、解压安装: 2.3、配置环境变量: 2.4、刷新环境变量: 2.5、验证: 三、安装Hadoop[伪分布式] 3.1、安装hd…...

Vue3(二)计算属性Computed,监视属性watch,watchEffect,标签的ref属性,propos属性,生命周期,自定义hook
文章目录 一 、计算属性1. 简写2. 完整写法 二、监视watch1. 监视【ref】定义的【基本类型】数据2. 监视【ref】定义的【对象类型】数据3. 监视【reactive】定义的【对象类型】数据4. 监视【ref】或【reactive】定义的【对象类型】数据中的某个属性5. 监视多个数据总结 三、wat…...

栈:只允许在一端进行插入或删除操作的线性表
一、重要术语: 栈顶、栈底、空栈 二、线性表的基本操作 三、栈的相关操作: 把线性表中的list改成stack insert改成 push delete 改成 pop 总结:“后进先出” 四、顺序栈: 缺点:栈的大小不可变 1.定义: …...
spring boot 热部署
热部署的主要作用是在服务器运行的时候可以在不关闭服务器的情况下修改代码 可以很大的提高开发效率 热部署的步骤很简单 首先,需要在 pom.xml 文件中引入热部署需要的依赖 <dependency><groupId>org.springframework.boot</groupId><artif…...

携手阿里云CEN:共创SD-WAN融合广域网
在9月19日举行的阿里云云栖大会上,犀思云作为SD-WAN领域的杰出代表及阿里云的SD-WAN重要合作伙伴,携手阿里云共同推出了创新的企业上云方案——Fusion WAN智连阿里云解决方案。这一创新方案不仅彰显了犀思云在SD-WAN技术领域的深厚积累,更体现…...

kettle从入门到精通 第八十七课 ETL之kettle kettle文件上传
1、kettle本身文件上传功能不是很友好,甚至是不能直接使用,需要调整文件上传接口才可以正常接收到文件,本次讲解内容主要是通过自定义插件解决这个问题。 2、通过springboot 编写简单demo,模拟文件上传,接口支持三个参…...

Algo-Lab 2 Stack Queue ADT
Lab 2: Stack & Queue ADT Part 1 这里只说一下最小栈的思路,我们可以在定义一个栈,来同步存储当前情况下的占的最小值。最小栈第一时间的想法可能是设定一个变量,每次push进来栈中的元素进行对比,保持最小值,…...
MySQL索引详解
前言 在数据库管理中,索引是提高数据检索速度的重要工具。MySQL作为流行的关系型数据库管理系统,提供了多种类型的索引来优化查询性能。本文将深入探讨MySQL索引的工作原理、类型、创建方法以及最佳实践。 索引简介 MySQL中的索引是一种数据库对象&am…...

fastadmin 根据选择数据来传参给selectpage输入框
文章目录 js代码php代码:完结 js代码 $(document).on(change,#table .bs-checkbox [type"checkbox"],function(){let url$(#chuancan).attr(data-url)urlurl.split(?)[0]let idsTable.api.selectedids(table)if(ids.length){let u_id[]ids.forEach(eleme…...

【算法】堆与优先级队列
【ps】本篇有 4 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1)最后一块石头的重量 .1- 题目解析 .2- 代码编写 2)数据流中的第 K 大元素 .1- 题目解析 .2- 代码编写 3)前K个高频单词 .1- 题目解析 .2- 代码编写 4…...
Java基础尚硅谷85-面向对象特征一:封装性
曾国藩说,基础不牢,很难走得远。 所以时时回顾一下Java基础,打好地基,让自己走得更稳,更远。 今天这节课,学到对自己有点价值的东西是: 为什么要封装?保护数据安全。只对外暴露极少…...

828华为云征文 | 将Vue项目部署到Flexus云服务器X实例并实现公网访问
一、Flexus云服务器X实例简介 1.1 概述 华为云Flexus X实例是华为云推出的一款创新云服务器产品,它主要面向中小企业和开发者,旨在解决传统云服务中的痛点,提供更加灵活、高效的云服务体验。 华为深刻洞察了中小企业和开发者在云服务应用中遇…...

828华为云征文|华为云Flexus云服务器X实例部署Xnote笔记应用
828华为云征文|华为云Flexus云服务器X实例部署Xnote笔记应用 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、Note Mark 介绍2.1 Xnote简介2.2 Xnote特点2.3 主要使用场景 三、本次实…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...