计算机组成原理 — 计算机的运算方法

计算机的运算方法

  • 计算机的运算方法
    • 无符号数和有符号数
      • 概念
      • 有符号数
        • 有符号数又分真值和机器数
        • 原码表示法
        • 补码表示法
        • 反码表示法
        • 三种机器数的特点
        • 移码表示法
    • 数的定点表示和浮点表示
      • 定点表示
      • 浮点表示
    • 定点运算
      • 移位运算
      • 算数移位规则
      • 加法与减法运算
      • 乘法运算
      • 除法运算
        • 概述
        • 恢复余数法
        • 加减交替法(不恢复余数法)
    • 浮点运算
      • 浮点数的加减运算
      • 浮点数的乘除运算(略)
    • 算术逻辑单元
      • ALU框图
      • 并行加法器
      • 串行进位链
      • 并行进位链
        • 单重分组跳跃进位
        • 双重分组跳跃进位


大家好呀!我是小笙,本章我主要分享计算机组成原理的输入输出系统知识,主要讲解计算机的运算方法,希望内容对你有所帮助!

计算机的运算方法

无符号数和有符号数

概念

计算机中的数均放在寄存器中,通常称寄存器的位数为机器字长。所谓无符号数,即没有符号的数,在寄存器中的每一位均可用来存放数值。当存放有符号数时,则需留出位置存放符号。因此,在机器字长相同时,无符号数与有符号数所对应的数值范围是不同的

比如:以机器字长为16位为例,无符号数的表示范围为 0~65535,而有符号数的表示范围为 -32768 ~ +32767


有符号数

有符号数又分真值和机器数

有正负符号(+、-)就是真值,用数字表示符号的就是机器数

image-20240312185640448
原码表示法

原码是机器数中最简单的一种表示形式,符号位为0表示正数,符号位为1表示负数,数值位即真值的绝对值,故原码表示又称为带符号的绝对值表示

整数的原码定义(n 为数值位数)

image-20240312190056513

举例如下

  • 真值: x = +1110 [x]原 = 0,1110 (逗号是用来间隔符号和数值)
  • 真值: x = -1110 [x]原 = 1,1110

小数的原码定义

image-20240312190201306

举例如下

  • 真值: x = +0.1110 [x]原 = 0,1110 (逗号是用来间隔符号和数值)
  • 真值: x = -0.1110 [x]原 = 1,1110

原码的特点是简单、直观,但是不易于进行加减法操作,引出补码


补码表示法

易于进行加减法操作(原理:就好比时钟顺时针旋转90度和逆时针旋转270度是没有区别的,可以把减法运算变成加法运算来简化)

整数的补码定义(n 为数值位数)

image-20240312190725110

举例如下

  • 真值: x = +1110 [x]原 = 0,1110 [x]补 = 0,1110 (逗号是用来间隔符号和数值)
  • 真值: x = -1110 [x]原 = 1,1110 [x]补 = 1,0010(计算方式可以将 2^(n+1) 也就是这里的 100000,先进行减1操作,变成 11111 进行加 x 操作,最后加回 1,就好得到最终的结果)

小数的补码定义

image-20240312191511882

举例如下

  • 真值: x = +0.1110 [x]原 = 0,1110 [x]补 = 0,1110 (逗号是用来间隔符号和数值部分)
  • 真值: x = -0.1110 [x]原 = 1,1110 [x]补 = 1,0010

原码求补码的快捷方式

  • 当原码为正数时,补码和原码是一致的
  • 当原码为负数时,补码可用原码(除符号位)每位都取反并末位加上1求得(补码转化成原码也是同样的规则)

反码表示法

反码通常用来作为由原码求补码或者由补码求原码的中间过渡

整数的反码定义(n 为数值位数)

image-20240312191714052

举例如下

  • 真值: x = +1110 [x]原 = 0,1110 [x]补 = 0,1110 [x]反 = 0,1110(逗号是用来间隔符号和整数数值)
  • 真值: x = -1110 [x]原 = 1,1110 [x]补 = 1,0010 [x]反 = 1,0001

小数的反码定义

image-20240312191915009

举例如下

  • 真值: x = +0.1110 [x]原 = 0.1110 [x]补 = 0.1110 [x]反 = 0.1110
  • 真值: x = -0.1110 [x]原 = 1.1110 [x]补 = 1.0010 [x]反 = 1.0001

练习题目

x = +70   [x]原 = 0,1000110  [x]补 =  0,1000110
x = -70   [x]原 = 1,1000110  [x]补 =  1,0111010
x = +0.1110   [x]原 = 0.1110  [x]补 = 0.1110
x = -0.1110   [x]原 = 1.1110  [x]补 = 1.0010
x = +0.0000   [x]原 = 0.0000  [x]补 = 0.0000 [x]反 = 0.0000 
x = -0.0000   [x]原 = 1.0000  [x]补 = 0.0000([+0]补 = [-0]补) [x]反 = 1.1111([+0]反 != [-0]反)
x = -1.0000   [x]原 = 不能表示  [x]补 = 1.0000 (10.0000 - 1.0000)
三种机器数的特点
  • 三种机器数的最高位均为符号位。符号位和数值部分之间可用 “,” 隔开
  • 当真值为正时,原码、补码和反码的表示形式均相同,即符号位用“0”表示,数值部分与真值相同
  • 当真值为负时,原码、补码和反码的表示形式不同,但其符号位都用“1”表示,而数值部分有这样的关系,即补码是原码的“求反加1”,反码是原码的“每位求反”

移码表示法

补码表示很难比较数字的大小

整数的移码定义(x 为真值)

image-20240312192123253

补码和移码之间的转换

补码和移码就是符号之间取反,其他都是相同的

注意:移码标志中零也是唯一的

数的定点表示和浮点表示

在计算机中,小数点不用专门的器件表示,而是按约定的方式标出,共有两种方法表示小数点的存在,即定点表示和浮点表示

定点表示

  • 当小数点位于数符和第一数值位之间时,机器内的数为纯小数
  • 当小数点位于数值位之后时,机器内的数为纯整数。
  • 采用定点数的机器称为定点机
  • 由于小数点的位置固定不变,故当机器处理的数不是纯小数或纯整数时,必须乘上一个比例因子,否则会产生“溢出”

image-20240316110035878

应用场景:通常用于对精度要求不是特别高的计算,比如音频处理、简单的数值计算等


浮点表示

浮点数即小数点的位置可以浮动的数(可以理解为科学计数法的引申)

浮点数表示法:S 为尾数(可正可负),j 为阶码(可正可负),r 是基数(或基值)

image-20240316110737288

浮点数转换示例

image-20240316111243257

浮点数在机器中的形式如下所示

采用这种数据格式的机器称为浮点机

  • 阶码是整数,阶符和阶码的位数合起来反映浮点数的表示范围及小数点的实际位置
  • 尾数是小数,其位数n反映了浮点数的精度
  • 尾数的符号代表浮点数的正负
image-20240319190538590

浮点数表示的范围

以通式 N=S×r^j 为例,设浮点数阶码的数值位取 m 位,尾数的数值位取 n 位,当浮点数为非规格化数时,它在数轴上的表示范围如下

image-20240316113449175

浮点数的规格化形式

  • 基数 r = 2 尾数最高位为1
  • 基数 r = 4 尾数最高2位为不全为0
  • 基数 r = 8 尾数最高3位为不全为0

基数越大,可表示的浮点数的范围越大,但是浮点数的精度降低

机械零

  • 当浮点数尾数为0时,不论其阶码为何值都当机械零处理
  • 当浮点数阶码等于或者小于它所表示的最小数时,不论尾数为何值都当机械零处理

应用场景:适用于需要大范围数值表示和较高精度的场合,如科学计算、图形渲染等

定点运算

移位运算

移位运算称为移位操作,对计算机来说,有很大的实用价值。例如,当某计算机没有乘(除)法运算线路时,可以采用移位和加法相结合,实现乘(除)运算

算数移位规则

image-20240318191558049

算术移位和逻辑移位的区别?

本质区别:符号位是否参与运算

  • 有符号数的移位称为算术移位
  • 无符号数的移位称为逻辑移位

算术左移时,符号位移至C,最高数位就可避免移丢

image-20240318191834589

加法与减法运算

补码加减运算的基本公式

  • 加法

  • 减法

    image-20240319124200649

举例

已知 A = 0.1011,B = -0.0101,求[A+B]补

image-20240319124328601

一位符号位溢出判断

参加操作的两位数符号相同,但是相加或者相减得出符号不同的结果,即为溢出

硬件实现:通过判断最高有效位 异或 符号位的进位 = 1

举例

在这个例子中,两个正数相加,结果却得到了一个负数(符号位为1)。这是不可能的,因为两个正数相加的结果应该是正数。因此,我们可以判断发生了正溢出

  01111111  (第一个数)
+ 01111111  (第二个数)
  -----------
  10111110  (结果)

二位符号位溢出判断

结果的双符号位相同 未溢出,反之溢出 比如: 01.xxx ;10.xxxx (最高符号位代表其真实的符号)

image-20240319124501376

举例

在这个例子中,两个正数相加,结果的双符号位变成了01,这表示发生了正溢出。因为双符号位的第一位是0,表示原来的数值是正数,而第二位是1,表示发生了正溢出

  00 11111111 11111111  (第一个数)
+ 00 00000000 00000001  (第二个数)
  -------------------
  01 00000000 00000000  (结果)

乘法运算

乘法运算可以用移位和加法来实现

示例

已知x = -0.1110 y = -0.1101,求[x·y]原 = 0.1011 0110(符号异或得到)

image-20240319125457391

除法运算

概述

笔算除法和机器除法之间的区别

笔算除法机器除法
商符单独处理符号位异或得出
心算上商|x| - |y| > 0 上商 1 ,反之上商 0
余数不动,低位补 0 减去,右移一位的除数余数左移一位低位补 0 减去除数
2 倍字长加法器,上商位置不固定1 倍字长加法器,在寄存器的末尾进行上商

原码的除法示例

[x] 原 = x0 * x1 * x2 … xn (绝对值标记为 x*)

[y] 原 = y0 * y1 * y2 … yn (绝对值标记为 y*)

约定

  • 小数定点除法 x* < y* => 反之溢出
  • 整数定点除法 x* > y* => 反之溢出
  • 被除数不能等于 0 => 异常
  • 除数不能为 0 => 直接求得 0
恢复余数法

恢复余数法的特点是:当余数(被除数)为负时,需加上除数,将其恢复成原来的余数。

案例如下:

已知 x = - 0.1011,y = -0.1101,求[x/y]原

image-20231015112934573

加减交替法(不恢复余数法)

运算规则:

  • 余数 R > 0 上商 1,2R - y* (余数R左移一位,加上 [-y*])
  • 余数 R < 0 上商 0,2R + y* (恢复余数R+y*,左移一位 2(R+y *) ,加上 [-y *] 得出 2R + y *)

案例如下:

已知 x = - 0.1011,y = 0.1101,求[x/y]原

image-20231015112840632

浮点运算

浮点数的加减运算

运算步骤

  • 对阶,使两数的小数点位置对齐。(小阶向大阶看齐)

  • 尾数求和,将对阶后的两尾数按定点加减运算规则求和(差)。

  • 规格化,为增加有效数字的位数,提高运算精度,必须将求和(差)后的尾数规格化。

    • 左规:尾数左移一位,阶码减1,直到第一数位和数符不同为止
    • 右规:当尾数溢出时,需要尾数右移一位,阶码加1
  • 舍入,为提高精度,要考虑尾数右移时丢失的数值位。

    • 0 舍 1 入法(“0舍1入”法类似于十进制数运算中的“四舍五人”法,即在尾数右移时,被移去的最高数值位为0,则舍去;被移去的最高数值位为1,则在尾数的末位加1)
    • 恒置 1 法(尾数右移时,不论丢掉的最高数值位是“1”或“0”,都使右移后的尾数末位恒置“1”)
  • 溢出判断,即判断结果是否溢出

浮点数的乘除运算(略)

算术逻辑单元

ALU框图

图中 Ai 和 Bi 为输入变量;ki 为控制信号,ki 的不同取值可决定该电路作哪一种算术运算或哪一种逻辑运算;Fi 是输出函数。

image-20240319185755884


并行加法器

并行加法器由若千个全加器组成

由于每位全加器的进位输出是高一位全加器的进位输入,因此当全加器有进位时,这种一级一级传递进位的过程将会大大影响运算速度

image-20240319185942199

输入 Ai Bi 输出和为 Si 以及进位 Ci

image-20240319190016253

串行进位链

串行进位链是指并行加法器中的进位信号采用串行传递

image-20240319190402109

若设与非门的级延迟时间为ty,那么当di、ti形成后,共需8ty,便可产生最高位的进位。实际上每增加一位全加器,进位时间就会增加2ty,n位全加器的最长进位时间为2nty


并行进位链

并行进位链是指并行加法器中的进位信号是同时产生的,又称先行进位、跳跃进位等

单重分组跳跃进位

单重分组跳跃进位就是将位全加器分成若干小组,小组内的进位同时产生,小组与小组之间采用串行进位,这种进位又有组内并行、组间串行之称。

左边的是每组的逻辑电路,左边是串行的组((小组内并行,小组间串行))

image-20240319190447719 image-20240319190506553


双重分组跳跃进位

将位全加器分成若干大组,每个大组中又包含若干小组,而每个大组内所包含的各个小组的最高位进位是同时产生的,大组与大组间采用串行进位。

32位并行加法器双重分组跳跃进位链框图(小组间并行,大组间串行)

image-20240319190538590

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT人工智能对话系统源码 电脑版+手机端+小程序三合一 带完整的安装代码包以及搭建教程

ChatGPT人工智能对话系统的研发&#xff0c;源于对自然语言处理技术的深入研究和探索。在人工智能领域&#xff0c;自然语言处理是实现人机交互的关键技术之一。通过模拟人类的自然语言交流方式&#xff0c;对话系统能够理解用户的意图和需求&#xff0c;并给出相应的回应。 以…

【Qt学习笔记】(三)--编写上位机软件(ui设置、样式表serialport串口接收数据、Qchart显示波形)

声明&#xff1a;本人水平有限&#xff0c;博客可能存在部分错误的地方&#xff0c;请广大读者谅解并向本人反馈错误。    这段时间大部分都是在学Qt&#xff0c;前面想着跟着书一章章的学&#xff0c;但是发现这个效率极低&#xff0c;所以就改变了学习的方法&#xff0c;那…

QT6实现创建与操作sqlite数据库及读取实例(一)

一.Qt为SQL数据库提供支持的基本模块&#xff08;Qt SQL&#xff09; Qt SQL的API分为不同层&#xff1a; 驱动层 SQL API层 用户接口层 1.驱动层 对于Qt 是基于C来实现的框架&#xff0c;该层主要包括QSqlDriver&#xff0c;QSqlDriverCreator,QSqlDriverCreatorBase,QSqlPlug…

初识GO语言

是由google公司推出的一门编程语言&#xff0c;12年推出的第一个版本 Go的特点 Go为什么能在最近的IT领域炙手可热 集python简洁&C语言的性能于一身 21世纪的C语言 顺应容器化时代的到来 区块链的崛起 学习一门编程语言可以划分为下面这三个步骤 安装 编译器 or 解…

C语言种sizeof()和strlen的区别

sizeof 是 C 语言内置的操作符关键字&#xff0c;而 strlen 是 C 语言库函数&#xff1b; sizeof 仅用于计算数据类型的大小或者变量的大小&#xff0c;而 strlen 只能以结尾为 \0 的字符串作为参数&#xff1b; 编译器在编译时就计算出了 sizeof 的结果&#xff0c;而 strlen …

【内核内存管理、动态分配及IO访问、LED驱动】

一、内核内存管理框架 内核将物理内存等分成N块4KB&#xff0c;称之为一页&#xff0c;每页都用一个struct page来表示&#xff0c;采用伙伴关系算法维护 内核地址空间划分图&#xff1a; 3G~3G896M&#xff1a;低端内存&#xff0c;直接映射 虚拟地址 3G 物理地址 ​ 细…

YOLOv8独家改进:block改进 | RepViTBlock和C2f进行结合实现二次创新 | CVPR2024清华RepViT

💡💡💡本文独家改进:CVPR2024 清华提出RepViT:轻量级新主干!从ViT角度重新审视移动CNN,RepViTBlock和C2f进行结合实现二次创新 改进结构图如下: 收录 YOLOv8原创自研 https://blog.csdn.net/m0_63774211/category_12511737.html?spm=1001.2014.3001.5482 💡…

UML学习体会

1. 水在前面 本来写作的水平就很一般&#xff0c;平时写的也少。最近看到一些文章说学习最好的方式是输出&#xff0c;刚好又重温了一遍UML方面的基础&#xff0c;所以想记录点学习心得。而且说实话这玩意平时基本不怎么用&#xff08;偶尔倒是看看别人的成果&#xff09;&…

mabatis 下

mybatis 原生的API&注解的方式MyBatis-原生的API调用快速入门需求快速入门代码实现 MyBatis-注解的方式操作快速入门需求快速入门代码实现注意事项和说明 mybatis-config.xml配置文件详解说明properties属性settings全局参数定义typeAliases别名处理器typeHandlers类型处理…

麒麟 V10 一键安装 Oracle 11GR2(231017)单机版

Oracle 一键安装脚本&#xff0c;演示 麒麟 V10 一键安装 Oracle 11GR2 单机版过程&#xff08;全程无需人工干预&#xff09;&#xff1a;&#xff08;脚本包括 ORALCE PSU/OJVM 等补丁自动安装&#xff09; ⭐️ 脚本下载地址&#xff1a;Shell脚本安装Oracle数据库 脚本第…

【C语言】结构体的内存对齐问题

1.结构体内存对齐 我们已经基本掌握了结构体的使用了。那我们现在必须得知道结构体在内存中是如何存储的&#xff1f;内存是如何分配的&#xff1f;所以我们得知道如何计算结构体的大小&#xff1f;这就引出了我们今天所要探讨的内容&#xff1a;结构体内存对齐。 1.1 对齐规…

深入浅出Go性能监控:使用expvar库的实战指南

深入浅出Go性能监控&#xff1a;使用expvar库的实战指南 引言expvar库概览主要组件介绍如何帮助开发者监控应用性能 实战开始&#xff1a;配置和初始化导入expvar库初始化expvar创建和注册自定义Var实例 监控关键数据使用expvar监控内存使用监控Goroutines数量自定义业务指标监…

软件测评中心:进行科技成果鉴定测试的注意事项和好处简析

软件产品科技成果鉴定是有效评价科技成果质量和水平的方法之一&#xff0c;也是鼓励科技成果通过市场竞争等方式得到有效的评价和认可&#xff0c;可以推动科技成果的进步和转化。 一、进行科技成果鉴定测试时的注意事项&#xff1a;   1、应由具备一定资质和能力的专业机构…

综合实验---Web---进阶版

目录 实验配置&#xff1a; 1.PHP调整主配置文件时&#xff0c;修改文件内容 1.原内容调整(在编译安装的情况下) 2.调整如下 3.没有调整的&#xff0c;根据之前配置就行 2.配置Nginx支持PHP解析 1.原内容如下 2.调整如下 3.验证PHP测试页 1.原内容如下 2.调整如下 4…

Ethsign银河活动开启,简单参与领6个NFT

简介&#xff1a;EthSign是一个基于区块链技术的去中心化电子签名平台&#xff0c;目的是解决传统中心化电子签名服务的各种问题。用户可以使用钱包或社交媒体帐户生成的私钥签署文件和协议&#xff0c;数字签名记录在链上&#xff0c;文件经过加密存储在去中心化存储网络中&am…

51-31 CVPR’24 | VastGaussian,3D高斯大型场景重建

2024 年 2 月&#xff0c;清华大学、华为和中科院联合发布的 VastGaussian 模型&#xff0c;实现了基于 3D Gaussian Splatting 进行大型场景高保真重建和实时渲染。 Abstract 现有基于NeRF大型场景重建方法&#xff0c;往往在视觉质量和渲染速度方面存在局限性。虽然最近 3D…

OSPF特殊区域(stub\nssa)

stub区域——只有1类、2类、3类&#xff1b;完全stub区域——只有1类、2类 NSSA区域&#xff1a;本区域将自己引入的外部路由发布给其他区域&#xff0c;但不需要接收其他区域的路由 在NSSA区域的路由器上&#xff0c;引入外部路由时&#xff0c;不会转换成5类LSA&#xff0c…

【保姆级教程】如何拥有GPT?(Proton邮箱版)

OnlyFans 订阅教程移步&#xff1a;【保姆级】2024年最新Onlyfans订阅教程 Midjourney 订阅教程移步&#xff1a; 【一看就会】五分钟完成MidJourney订阅 GPT-4.0 升级教程移步&#xff1a;五分钟开通GPT4.0 如果你需要使用Wildcard开通GPT4、Midjourney或是Onlyfans的话&am…

故障诊断 | 一文解决,RBF径向基神经网络的故障诊断(Matlab)

文章目录 效果一览文章概述专栏介绍模型描述源码设计参考资料效果一览 文章概述

【暑期实习记录】腾讯oc

部门&#xff1a;实习基地 - 无意向 - csig腾讯云捞 TimeLine 3.3 压线投递实习基地 3.6 一面 主要深问项目&#xff0c;包括设计、困难点、亮点、迭代过程、对比、测试和部署等&#xff0c;然后问了一些相关的八股&#xff0c;一道简单sql和简单算法 之后反问面试官他对应…