计算机的运算方法

无符号数

定义:没有符号的数,在寄存器中的每一位均可用来存放数值

表示范围:n 位无符号数 0~2n -1

有符号数

定义:符号位+数值位

“0”代表正,“1”代表负

表示范围:n 位有符号整数

原码、反码: -(2n-1 -1)~ 2n-1 -1【关于原点对称】 ,一共 2n -1 个数

补码:-2n-1 ~ 2n-1 -1,一共 2n 个数

原码

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

原码表示:带符号的绝对值表示

书写要求:整数的符号位与数值位之间用逗号隔开

小数的符号位与数值位之间用小数点隔开

真值零的原码表示有正零和负零两种形式,[+0]原 =00000 和 [-0]原 =10000

反码

正数:反码和原码表示相同

负数:符号位为1,数值位按位取反(即符号位不变,数值位按位取反)

真值零的反码表示不唯一,负数的反码符号位为“1”,数值部分取反,[+0]反 =0.0000,[-0]反 =1.1111

补码

一个负数可用其正补数代替,该正补数用模加负数本身求得

一个正数和一个负数互为补数时,绝对值之和为模数

正数的补数即该正数

正数:补码和原码表示相同

负数:反码+1

真值零的补码表示是唯一的,[+0]补 =[-0]补 =0.0000

移码

移码:在真值 X 上加上一个常数(偏置值),通常该常数取 2n ,n+1 位有符号数

同一真值的补码和移码仅差一个符号位,将补码的符号位由“0”改为“1”,或从“1”改为“0”,即可得该真值的移码

数的表示

定点表示

定点数:小数点固定在某一位置的数(约定小数点位置不变)

浮点表示

小数点的位置可用浮动

表示形式

表示范围

浮点数的规格化

目的

提高浮点数的精确度

左规

算数左移,阶码-1

右规

算数右移,阶码+1

规格化操作

基数为 2,尾数的最高位为1的数为规格化数;规格化时,尾数左移一位,阶码-1,尾数右移一位,阶码+1

基数为4,尾数的最高两位不全为0的数为规格化数;规格化时,尾数左移两位,阶码-1,尾数右移两位,阶码+1

基数为8,尾数的最高三位不全为0的数为规格化数;规格化时,尾数左移三位,阶码-1,尾数右移三位,阶码+1

发电机中一旦基数确定就不再改变,基数是隐含的,不同基数的浮点数表示形式完全不同

基数不同,对数的表示范围和精度等都有影响

基数 r 越大,可表示的浮点数范围越大,所表示的数的个数越多,浮点数的精度下降

IEEE 754 标准

阶码部分含阶符

数符:表示浮点数的正负,与其有效位(尾数)是分开的

  • 对于规格化的二进制浮点数,数值的最高位总是“1”,为了能使尾数多表示一位有效位,将这个“1”隐含,因此尾数数值实际上是24位。隐含的“1”是一位整数。

移位运算

意义:二进制表示的机器数在相对于小数点作 n 位左移或右移时,其实质就是该数乘以或除以2n

逻辑移位

移位对象:无符号数

操作:逻辑左移时,高位移丢,低位补0;逻辑右移,地位移丢,高位补0

算术移位

移位对象:有符号数

操作:符号位保持不变,仅对数值位进行移位

正数

原码=反码=补码=真值,移位后出现的空位均补0

负数

原码

移位后出现的空位补0

反码

移位后出现的空位补1

补码

负数的补码=反码+1,导致反码最右边几个连续的1因进位变为0,直到进位碰到第一个0为止,所以,负数补码中,最右边的1及其右边同原码,左边同反码

左移后出现的空位补0,右移后出现的空位补1

加法与减法运算

加减法运算是计算机中最基本的运算

减法运算可看作被减数加上一个减数的负值,即 A-B=A+(-B)

补码加减法运算

补码表示的两个数进行加法运算时,可把符号位与数值位同等处理,只要结果不超出机器能表示的数值范围,运算后的结果按 2n+1 取模(对于整数)或按 2 取模(对于小数),可得到本次加法的运算结果

取模的意义:丢掉最左边的进位

基本思路

[-B]补 由 [B]补 连同符号位在内,每位取反+1得到

溢出判断

一位符号位判断溢出

对于加法,只有正数+正数和负数+负数两种情况下才可能出现溢出,符号不同的两个数相加,是不会溢出

正数+正数=负数,上溢

负数+负数=正数,下溢

对于减法,只有正数-负数或负数-正数两种情况下才可能出现溢出,符号相同的两个数相减,是不会溢出的

两位符号位判断溢出

2 位符号位不同时,表示溢出,否则,无溢出

乘法运算

原码乘法

原码一位乘运算规则

原码一位乘所需的硬件配置

A、X、Q 为 n+1 位寄存器

X:存放被乘数的原码

Q:存放乘数的原码

末尾乘数 Qn :控制移位和加控制电路( 当 Qn = 1 时,A 和 X 内容相加后,A、Q 右移一位;当 Qn =0 时,只作 A、Q 右移一位操作 )

C:控制逐位相乘的次数

S:存放乘积的符号

GM :乘法标记

原码一位乘控制流程

原码两位乘

原码两位乘,与原码一位乘一样,符号位和数值位的运算分开进行

用两位乘数的状态决定新的部分积如何形成,提高运算速度

除法运算

笔算除法

原码除法

实际上用补码进行运算

恢复余数法

特点:当余数为负时,需加上除数,将其恢复成原来的余数

商值的确定通过比较被除数和除数的绝对值大小 x*-y* 实现,因计算机内只设加法器,故将 x*-y* 变为[x*]补+[-y*]补 操作

不恢复余数法

浮点运算

浮点加减

当两浮点数阶码不等时,两尾数小数点的实际位置不一样,位数部分无法直接进行加减运算

运算步骤

  1. 对阶
  2. 尾数求和
  3. 规格化
  4. 舍入
  5. 溢出判断
对阶

目的:使两数的小数点位置对齐,即使两数的阶码相等

原则:小阶向大阶看齐,使阶小的尾数向右移动,右移的次数等于阶差

尾数右移可能会发生数码丢失,影响精度

尾数求和

操作:将对阶后的两尾数按定点加减运算规则求和(差)

规格化

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

左规:00.0XX...X 或 11.1XX...X

右规:01.XX...X 或 10.XX...X

舍入

目的:提高精度,要考虑尾数右移时丢失的数值位

“0 舍 1 入”法:尾数右移时,被移去的最高数值位为 0,舍去;被移去的最高数值位为 1,则在尾数的末位+1。这样做可能使得尾数溢出,需再做一次右规

“恒置 1”法:尾数右移时,不论丢掉的最高数值位是“1”或“0”,都使右移后的尾数末尾恒置“1”

溢出判断

尾数出现 01.XXX 或 10.XXX 不表示这一浮点数溢出,只有将此数右规后,才能再根据阶码判断浮点运算结果是否溢出

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

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

相关文章

Rust编程基础之引用与借用

1.引用与借用 在上一章节最后的代码中, 我们必须将 String 返回给调用函数,以便在调用 calculate_length 后仍能使用 String,因为 String 被移动到了 calculate_length 内。相反我们可以提供一个 String 值的引用(reference)。引…

理解交叉熵(Cross Entropy)

交叉熵(Cross-Entropy)是一种用于衡量两个概率分布之间的距离或相似性的度量方法。在机器学习中,交叉熵通常用于损失函数,用于评估模型的预测结果与实际标签之间的差异。 在分类问题中,交叉熵损失函数通常用于多分类问…

uniapp小程序才到第五层就报错navigateto:fail webview count limit exceed

错误截图 原因 小程序官方描述是说可以跳转10层,但是使用uniapp开发的程序在小程序中才运行到第五层就报错了,原因是因为没有设置appId。如果设置了就正常了。

Docker与微服务实战——基础篇

Docker与微服务实战——基础篇 第一章 Docker 简介1.1 docker 理念1.2 容器与虚拟机比较 第二章 Docker 安装2.1 前提说明2.2 Docker的基本组成2.2.1 镜像(image)2.2.2 容器(container)2.2.3 仓库(repository&#xff…

php实现普通和定时跳转的几种方式

一、普通跳转 1、使用header函数:通过设置HTTP头部信息实现页面跳转。可以使用Location头部指定跳转的URL。例如: header("Location: http://www.example.com"); exit(); 2、使用JavaScript:可以使用JavaScript的window.location…

HCIA_数据链路层

如果数据进行封装时,基于E2或者802.3标准,此时我们称之为是一个以太网帧 1、EthernetII 采用EthernetII协议会在数据基础之上多出18Byte,EthernetII的数据长度是46-1500B FCS(Frame check Sequence)帧校验序列&#…

Linux安装nodejs问题

安装nodejs后,使用node -v报下图 参考下面两个可解决:【Linux-编译器gcc/glibc升级】CentOS7.9使用NodeJS18时报错/lib64/libm.so.6: version GLIBC_2.27‘ not found-CSDN博客 报错信息ImportError: /lib64/libstdc.so.6: version CXXABI_1.3.9‘ not f…

技术分享 | app自动化测试(Android)--元素定位方式与隐式等待

元素定位是 UI 自动化测试中最关键的一步,假如没有定位到元素,也就无法完成对页面的操作。那么在页面中如何定位到想要的元素,本小节讨论 Appium 元素定位方式。 Appium的元素定位方式 定位页面的元素有很多方式,比如可以通过 I…

C++day4

1.思维导图 2.设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数、拷贝赋值函数。 #include <iostream&…

mybatis在springboot当中的使用

1.当使用Mybatis实现数据访问时&#xff0c;主要&#xff1a; - 编写数据访问的抽象方法 - 配置抽象方法对应的SQL语句 关于抽象方法&#xff1a; - 必须定义在某个接口中&#xff0c;这样的接口通常使用Mapper作为名称的后缀&#xff0c;例如AdminMapper - Mybatis框架底…

2023年中国金融控股公司研究报告

第一章 行业概况 1.1 定义 金融控股公司这一术语最初源自美国&#xff0c;特别是在美国的《金融服务法案》关于银行控股公司组织结构的条文中&#xff0c;首次出现了“金融控股公司”&#xff08;Financial Holding Company&#xff09;这一法律术语&#xff0c;尽管法案中并…

使用Ruby编写通用爬虫程序

目录 一、引言 二、环境准备 三、爬虫程序设计 1. 抓取网页内容 2. 解析HTML内容 3. 提取特定信息 4. 数据存储 四、优化和扩展 五、结语 一、引言 网络爬虫是一种自动抓取互联网信息的程序。它们按照一定的规则和算法&#xff0c;遍历网页并提取所需的信息。使用Rub…

《安富莱嵌入式周报》第326期:航空航天级CANopen协议栈,开源USB PD电源和功耗分析,开源EtherCAT伺服驱动板,时序绘制软件,现代机器人设计

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 更新一期视频教程&#xff1a; BSP视频教程第28期&#xff1a;CANopen协议栈专题&#xff0c;CANopen主从机组网实战&a…

考研408-计算机网络 第一章-计算机网络体系结构学习笔记及习题

第一章 计算机网络体系结构 一 计算机网络概述 1.1 概念及功能 1.1.1 计算机网络的概念 计算机网络就是互连的、自治的计算机系统的集合 互连&#xff1a;通过通信链路互联互通 自治&#xff1a;各个节点之间无主从关系&#xff0c;高度自治的 1.1.2 计算机网络的功能 功…

【STM32】Systick定时器

一、STM32的5种定时器简介 1.独立看门狗&#xff08;IWDG&#xff09; VS 窗口看门狗&#xff08;WWDG&#xff09; 1.独立看门狗&#xff08;IWDG&#xff09; 独立看门狗&#xff1a;当没有到设定时间之前&#xff0c;给它喂了狗&#xff0c;就会回到初始值。 2.窗口看门狗…

【Linux】:初识git || centos下安装git || 创建本地仓库 || 配置本地仓库 || 认识工作区/暂存区(索引)以及版本库

&#x1f4ee;1.初识git Git 原理与使用 课程⽬标 • 技术⽬标:掌握Git企业级应⽤&#xff0c;深刻理解Git操作过程与操作原理&#xff0c;理解⼯作区&#xff0c;暂存区&#xff0c;版本库的含义 • 技术⽬标:掌握Git版本管理&#xff0c;⾃由进⾏版本回退、撤销、修改等Git操…

.NET Framework中自带的泛型委托Func

Func<>是.NET Framework中自带的泛型委托&#xff0c;可以接收一个或多个输入参数&#xff0c;并且有返回值&#xff0c;和Action类似&#xff0c;.NET基类库也提供了多达16个输入参数的Func委托&#xff0c;输出参数只有1个。 1、Func泛型委托 .NET Framework为我们提…

声音训练数据集哪里找?中文、英文

一般找数据集的都是需要训练底膜的&#xff0c;大家git上找的开源项目大多是预训练模型。预训练就是别人已经训练好的底膜&#xff0c;你在他的基础上进行调整。而我们训练如果他这个模型不理想是需要训练底膜的。 找的方式是从git开源上找 中文 推荐MockingBird&#xff0c;…

单链表的实现

单链表的实现 单链表的链表的概念及结构概念结构链表结构的分类链表常用的结构 无头单向不循环链表头文件 SList.h结构体 struct SListNode 源文件 SList.c创建结点 SLNode* SLBuyNode(SLDataType x)初始化链表 void SLInit(SLNode** pphead)链表尾部插入 void SLPushBack(SLNo…

【Qt之绘制兔纸】

效果 代码 class drawRabbit: public QWidget { public:drawRabbit(QWidget *parent nullptr) : QWidget(parent) {}private:void paintEvent(QPaintEvent *event) {QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);// 绘制兔子的耳朵painter.s…