计算机组成原理【CO】Ch2 数据的表示和应用

文章目录

  • 大纲
    • 2.1 数制与编码
    • 2.2 运算方法和运算电路
    • 2.3 浮点数的表示和运算
  • 【※】带标志加法器
    • OF
    • SF
    • ZF
    • CF
    • 计算机怎么区分有符号数无符号数?
  • 【※】存储排列和数据类型转换
    • 数据类型大小
    • 数据类型转换
  • 进位计数制
    • 进制转换
    • 2的次幂
  • 各种码的基本特性
  • 无符号整数的表示和运算
  • 带符号整数的表示和运算
  • 码之间的转换
  • 移位运算
    • 算数移位【针对有符号数】
    • 逻辑移位【针对无符号数】
    • 循环移位
  • 乘除运算
    • 无符号整数
    • 有符号数
  • 【※】IEEE754
    • IEEE754浮点数与真值相互转化
      • 由浮点数确定真值(阶码不是全0、也不是全1) :
    • 浮点数的加减运算
  • C强制类型转换
  • 浮点数的规格化

大纲

2.1 数制与编码

  • 王道书和大学教材讲到原码、补码时,使用了数学化的语言来讲解,不用过于深究,不是重点。计组这门课在考试中只考察应用,不考数学原理。对补码的数学原理感兴趣的同学,可以研究《数论》。
  • 这个小节学起来难,但做起题来不算难。不建议反复死磕视频和王道书,可以先学一遍,然后直接做题,用“做题驱动复习”。

2.2 运算方法和运算电路

  • 本节内容较多,一天的时间可能学不完。建议大家按照“伴学营打卡表”推荐的顺序做题,学一部分,做几道题。不建议一口气全部看完再去做题,那样一定消化不了。
  • 对于没学过《数字电路》的同学,串行加法器、并行加法器的底层原理一定很难理解。不过没关系,考试不可能考太底层的电路设计。
  • 带标志位的加法器是考试重点,也是经常结合第四章考察的重点,需要认真理解。OF、SF、ZF、CF 标志位的生成和作用一定要掌握。
  • 乘法、除法的原理细节不容易理解,但考察频率较低,第一次学如果觉得难,也不建议花太多时间。只需要先建立起这个认知:在计算机硬件层面,无论是乘法还是除法,都是通过 加法、减法、移位运算 来实现的。
  • C语言中各种数据类型的存储和相互转换、数据的存储和排列,这两部分内容很重要,经常结合大题考察,需认真理解。

2.3 浮点数的表示和运算

  • 本节又是一块硬骨头,没什么好说的,学吧。第一次学难免让人怀疑人生,保持平常心尽力去学尽力去做题就好。第一次学习不建议死磕细节,得配合做题来体会这个部分怎么考,用“做题驱动复习”。
  • 但很多同学的反馈是:“第一次学感觉很复杂,但第二轮回来复习感觉也没那么难”。原因是,本节内容虽难,但在经过做题训练之后,大家都会更清晰的认识到 “哪些地方是考试重点”、““哪些地方应该是我重点关注的”。

【※】带标志加法器

OF

  • 有符号数的加减运算是否发生了溢出。
  • OF=1时,说明发生了溢出
  • OF=最高位产生的进位 ⊕ 次高位产生的进位
  • OF位对无符号数的加减法无意义

SF

  • 有符号数加减运算结果的正负性。
  • SF=0表示运算结果为正数,SF=1表示运算结果为负数
  • SF = 最高位的本位和(也是结果的最高位)
  • SF位对无符号数的加减法无意义

ZF

  • 表示运算结果是否为0。
  • ZF=1表示运算结果为0,ZF=0表示运算结果非0
  • 两个数的运算结果为n bit,只有n bit全为0时,ZF =1
  • 对有符号、无符号都有意义

CF

  • 进位、借位标志

  • 表示无符号数的加减法是否发生了进位或借位

  • 当CF=1时,说明无符号数的加减法发生了进位或借位,即发生了溢出

  • CF=最高位产生的进位⊕sub

    • sub=1,表示减法
    • sub=0,表示加法
  • CF位对有符号数的加减法无意义

  • 有符号数的加减运算是否发生了溢出。

  • OF=1时,说明发生了溢出

  • OF=最高位产生的进位 ⊕ 次高位产生的进位

  • OF位对无符号数的加减法无意义
    在这里插入图片描述

计算机怎么区分有符号数无符号数?

  • 标志位会保存在PSW,ALU无法区分有符号数和无符号数,但由于计算机分为无符号加法和有符号加法。指令不同,执行时安排的微操作不同,从而区分有符号数和无符号数。

【※】存储排列和数据类型转换

数据类型大小

  • char:1B
  • short:2B
  • int:4B
  • float:4B
  • long:4B
  • double:8B

Tips:

  • C语言中定点整数是用补码存储的

数据类型转换

整数之间转换(带符号和无符号之间)

  • 长度相同
    • 机器数不变,解释方式改变
  • 短变长
    • 先扩展:
      • 无符号数补0
      • 有符号数补符号
    • 再解释
  • 长变短
    • 直接截断,只留下低位
    • 再解释

整数与浮点数之间的转换

  • 整数转浮点数:
    • 先转换为2进制,写出科学记数法1.xxxx,再转为浮点数,截断尾部采用0舍1入的原则
    • ⚠️可能精度丢失
  • 浮点数转整数:
    • 写出二进制小数,去掉小数部分,整数部分保留更低的位数
    • ⚠️可能溢出、精度丢失

进位计数制

进制转换

  • 二进制 <-> 八进制:每3个二进制位对应一个八进制位
  • 二进制 <-> 十六进制:每4个二进制位对应一个十六进制位
    • 【PS:整数部分前面补0,小数部分后面补0】
  • 十进制 -> 进制
    • 整数部分:除基取余法,先取得的“余”是整数的低位
    • 小数部分:乘基取整法,先取得的“整”是小数的高位

2的次幂

次幂2的次幂
-40.0625
-30.125
-20.25
-10.5
01
12
24
38
416
532
664
7128
8256
9512
101024
112048
124096
138192
1416384
1532768
1665536

各种码的基本特性

在这里插入图片描述

无符号整数的表示和运算

• 加法
• 全部位按位相加
• 减法
x − y = x + [ − y ] x-y=x+[-y] xy=x+[y]
[ − y [−y [y]是 [ y ] [y] [y]从右往左第一个1的左边全部取反
• 溢出
• 手算:判断加减法的结果是否超出无符号数合法表示范围
• 机算: C F = 最高位进位 ⊕ S u b CF = 最高位进位 ⊕ Sub CF=最高位进位Sub

带符号整数的表示和运算

Tips:
• 计算机内部,所有带符号整数的加减法都要先转换为补码

计算机硬件如何做带符号数补码的加法:
• 从最低位开始,所有位按位相加(符号位参与运算),并往更高位进位

计算机硬件如何做带符号数补码的减法:
• "被减数”不变,“减数”从右往左找到第一个1,这个1左边的全部位按位取反减法变加法

有符号数:
• 加法
• 按位相加
• 减法
[ x ] 补 − [ y ] 补 = [ x ] 补 + [ − y ] 补 [x]_补 - [y]_补 = [x]_补 + [−y]_补 [x][y]=[x]+[y]
[ − y ] 补 是 [ y ] 补 [−y]_补 是 [y]_补 [y][y] 从右往左第一个1的左边全部位按位取反
• 溢出
• 手算:判断加减法的结果是否超出有符号数合法表示范围
• 机算: O F = 最高位进位 ⊕ 次高位进位 OF = 最高位进位 ⊕ 次高位进位 OF=最高位进位次高位进位

码之间的转换

在这里插入图片描述

  • [x]_移→[−x]_移:全部位按位取反,末位+1
  • 使用补码表示时,若符号位相同,则数值位越大,码值越大

[ x ] 原 → [ x ] 反 ? [x]_原→[x]_反? [x][x]
• 正数:不变
• 负数:符号位不变,数值位按位取反
[ x ] 原 ↔ [ x ] 补 ? [x]_原↔[x]_补? [x][x]
• 正数:不变
• 负数:符号位不变,从右往左找到第一个“1”,这个1左边的所有“数值位”按位取反
[ x ] 补 ↔ [ − x ] 补 ? [x]_补↔[−x]_补? [x][x]
• 从右往左找到第一个“1”,这个1左边的全部位按位取反
[ x ] 补 ↔ [ x ] 移 ? [x]_补↔[x]_移? [x][x]
• 符号位取反

如何用补码快速计算真值:
- 直接在补码前面加上负号,再计算值
○ Eg: [ 1110 ] 补 = − 2 3 + 2 2 + 2 = − 2 [1110]_补 = −2^3 + 2^2 + 2 = −2 [1110]=23+22+2=2
- 遇到一大串的1,将其看作符号位,直接化为最简,再用上述方法
○ Eg: [ 11111110 ] 补 = [ 10 ] 补 = − 2 [11111110]_补 = [10]_补 = −2 [11111110]=[10]=2

如何快速求真值的补码:
eg: − 8190 = − 8192 + 2 = [ 1110 , 0000 , 0000 , 0010 ] 补 = E 002 H −8190 = −8192 + 2 = [1110,0000,0000,0010]_补 = E002H 8190=8192+2=[1110,0000,0000,0010]=E002H

移位运算

算数移位【针对有符号数】

  • 左移1位相当于乘基数;右移1位相当于除基数,但由于位数有限,所以有时候算数移位并不能完全等效于乘除运算。
  • 是针对有符号数:符号位保持不变。
    • 正数:原码、反码、补码,无论左移还是右移都是补0
    • 负数:
      • 原码左移、右移都补0
      • 反码左移和右移都补1
      • 补码左移补0,右移补1
  • 若采用双符号位来表示数,则最高符号位永远是真正的符号位,因此在算术移位时只有高符号位保留不变,低符号位要参与移位

逻辑移位【针对无符号数】

  • 针对无符号数。符号位参与,左移、右移都补0,移出的位舍弃

循环移位

  • 不带进位位
    • 用移出的位补上空缺
  • 带进位位
    • 移出的位放到进位位,原进位位补上空缺

乘除运算

无符号整数

  • 逻辑左移代替*2
  • 溢出判断:
    • n位乘n位,若用2n位保存乘积,则不会溢出
    • n位乘n位,若用2n位保存中间结果,最后截取末尾n位作为最终的乘积,则可能溢出
      • 当且仅当2n的前n位都是0时才不会溢出

有符号数

  • 算术左移代替*2
  • 溢出判断:
    • n位乘n位,若用2n位保存乘积,则不会溢出
    • n位乘n位,若用2n位保存中间结果,最后截取末尾n位作为最终的乘积,则可能溢出
      • 当且仅当2n的前n+1位是全0或全1时才不会溢出

【※】IEEE754

在这里插入图片描述

IEEE754浮点数与真值相互转化

由浮点数确定真值(阶码不是全0、也不是全1) :

  • 划分“某浮点数”,确定数符、阶码、尾数的分布
  • 确定尾数1.M(注意补充最高的隐含位1)
  • 确定 阶码的真值 = 移码 − 偏置值 阶码的真值 = 移码-偏置值 阶码的真值=移码偏置值 (可将移码看作无符号数,用无符号数的值减去偏置值)
  • ( − 1 ) s × 1. M × 2 ( E − 偏置值 ) (-1)^s × 1.M × 2^{(E - 偏置值)} (1)s×1.M×2(E偏置值)

浮点数的加减运算

对阶

  • 目的:使两个操作数的小数点位置对齐
  • 对阶操作只把较小的阶码调整到较大的阶码【所以不会引起阶码的上溢或下溢】
  • 阶码增大,尾数右移
  • 无阶码减小的情况【因为只用小阶向大阶对齐】

尾数求和

  • 原码定点数的加减法

规格化

  • 尾数规格化为1.xxxx的形式

舍入

  • 舍入是浮点数概念,定点数无舍入
  • 浮点数舍入的情况:对阶或者右规格化
  • 舍入不一定产生误差(后几位为0时不产生误差)

溢出

  • 尾数右规,阶码上溢,发生溢出异常
  • 尾数左规,阶码下溢,当机器0处理
  • 如果双符号位为01或10时,则溢出【第一个符号是真的符号】
    • 10:正溢
    • 01:负溢
  • 尾数舍入可能引起阶码的上溢
  • 尾数溢出时,结果不一定溢出
    在这里插入图片描述

C强制类型转换

  • 无损:
    • char→int→long→double
    • float→double
  • 有损:
    • int→float【可能会损失精度,float 的尾数数值位只有1+23位】
    • float→int 【可能会溢出,也可能会损失精度,如小数转整数】

浮点数的规格化

  • 规格化:规定尾数的最高数位必须是一个有效值(1)【即,基数为2时,要求尾数: 1 / 2 ≤ ∣ M ∣ < 1 1/2≤|M|<1 1/2M<1
  • 采用规格化浮点数的目的是为了增加数据的表示精度
  • 负数补码的最高数值位是0,就是一个规定,不用纠结为什么
  • 补码表示的最高位与尾数的符号位不同时,表示规格化了
    在这里插入图片描述

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

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

相关文章

(我的创作纪念日)[MySQL]数据库原理7——喵喵期末不挂科

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;大大会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

50+ Midjourney 美食相关提示词,看了别流口水哦

Midjourney 是一个无限的创意宝藏。通过对提示词的精挑细选&#xff0c;我们就可以从这个宝藏里面挖掘无数的美食创意。有些效果令人惊叹&#xff0c;甚至无法在现实世界中复刻。本文不只是罗列 50 多个提示词&#xff0c;而是对它们进行分门别类&#xff0c;并附上图片。相信你…

ELK、ELKF企业级日志分析系统介绍

前言 随着企业级应用系统日益复杂&#xff0c;随之产生的海量日志数据。传统的日志管理和分析手段&#xff0c;难以做到高效检索、实时监控以及深度挖掘潜在价值。在此背景下&#xff0c;ELK日志分析系统应运而生。"Elastic" 是指 Elastic 公司所提供的一系列与搜索…

C++(3) —— 核心编程

一、内存区分模型 1.1 程序运行前 #include<iostream> using namespace std;// 全局变量 int g_a 10; int g_b 20;// const修饰的全局变量&#xff0c;全局常量 const int c_g_a 10; const int c_g_b 20;int main() {// 全局区// 全局变量、静态变量、常量// 创建普通…

采集某新闻网资讯网站保存PDF

网址&#xff1a;融资总额近3亿美元、药明康德押注&#xff0c;这家抗衰老明星公司有何过人之处-36氪 想要抓取文章内容&#xff0c;但是找不到啊&#xff0c;可能是文字格式的问题&#xff0c;也可能文章内容进行了加密。 在元素中查看&#xff0c;window.initialState返回的就…

【Unity+Python】如何通过Socket进行通信

1、Unity端创建名为UnityClient.cs脚本代码(客户端)&#xff1a; 注意&#xff1a;unity的规则中类&#xff0c;名和脚本文件名需要相同。 using System.Net.Sockets; using System.Text; using UnityEngine;public class UnityClient : MonoBehaviour {TcpClient client;Netw…

CSS核心样式-02-盒模型属性及扩展应用

目录 三、盒模型属性 常见盒模型区域 盒模型图 盒模型五大属性 1. 宽度 width 2. 高度 height 3. 内边距 padding 四值法 三值法 二值法 单值法 案例 4. 边框 border 按照属性值的类型划分为三个单一属性 ①线宽 border-width ②线型 border-style ③边框颜色 bo…

软考高级架构师:随机函数模型

一、AI 讲解 随机函数模型是理解各种随机过程和算法的一个重要概念&#xff0c;在软件工程、算法设计以及系统分析中有着广泛的应用。简而言之&#xff0c;随机函数模型是一种用于描述具有随机性的系统或过程的数学模型&#xff0c;它能够帮助我们预测和分析在不确定性下的系统…

基于java+springboot+vue实现的智能停车计费系统(文末源码+Lw+ppt)23-30

摘 要 随着人们生活水平的高速发展&#xff0c;智能停车计费信息管理方面在近年来呈直线上升&#xff0c;人们也了解到智能停车计费的实用性&#xff0c;因此智能停车计费的管理也逐年递增&#xff0c;智能停车计费信息的增加加大了在管理上的工作难度。为了能更好的维护智能…

MySQL基础入门上篇

MySQL基础 介绍 mysql -uroot -p -h127.0.0.1 -P3306项目设计 具备数据库一定的设计能力和操作数据的能力。 数据库设计DDL 定义 操作 显示所有数据库 show databases;创建数据库 create database db02;数据库名唯一&#xff0c;不能重复。 查询是否创建成功 加入一些…

学习基于pytorch的VGG图像分类 day5

注&#xff1a;本系列博客在于汇总CSDN的精华帖&#xff0c;类似自用笔记&#xff0c;不做学习交流&#xff0c;方便以后的复习回顾&#xff0c;博文中的引用都注明出处&#xff0c;并点赞收藏原博主. 目录 VGG的数据集处理 1.数据的分类 2.对数据集的处理 VGG的分类标签设置 …

spring boot集成logback到mysql 8

spring boot集成logback到mysql 8 依赖数据库准备创建log日志用户&#xff0c;并创建数据库执行建表sql 配置文件bugbug 1&#xff1a;Failed to instantiate type ch.qos.logback.classic.db.DBAppenderbug信息&#xff1a;解决&#xff1a; bug2: DBAppender cannot function…

设计模式-代理模式(Proxy)

1. 概念 代理模式&#xff08;Proxy Pattern&#xff09;是程序设计中的一种结构型设计模式。它为一个对象提供一个代理对象&#xff0c;并由代理对象控制对该对象的访问。 2. 原理结构图 抽象角色&#xff08;Subject&#xff09;&#xff1a;这是一个接口或抽象类&#xff0…

AIGC专栏10——EasyAnimate 一个新的类SORA文生视频模型 轻松文生视频

AIGC专栏10——EasyAnimate 一个新的类SORA文生视频模型 &#x1f4fa;轻松文生视频 学习前言源码下载地址技术原理储备&#xff08;DIT/Lora/Motion Module&#xff09;什么是Diffusion Transformer (DiT)LoraMotion Module EasyAnimate简介EasyAnimate原理界面展示快速启动云…

主干网络篇 | YOLOv8更换主干网络之ConvNext | 全新的纯卷积模型

前言:Hello大家好,我是小哥谈。2022年,Facebook AI Research和UC Berkeley一起发表了一篇文章A ConvNet for the 2020s,在文章中提出了ConvNeXt纯卷积神经网络,它对标的是2021年非常火的Swin Transformer,通过一系列实验比对,在相同的FLOPs下,ConvNeXt相比Swin Transfo…

软考系规第2章思维导图,软硬件网络和次新技术大杂烩

虽然目前系统规划与管理师的教程是否改版存在不确定性&#xff0c;但是不影响咱们先概要了解当前的教程&#xff0c;使用思维导图的方式粗读教程。 为了帮助你更好的学习系规教程&#xff0c;降低系规教程阅读门槛&#xff0c;指尖疯特发起了教程伴读活动&#xff0c;通过伴读脑…

《由浅入深学习SAP财务》:第2章 总账模块 - 2.6 定期处理 - 2.6.4 月末操作:货币折算

2.6.4 月末操作&#xff1a;货币折算 如果一个公司代码启用了多个本位币&#xff0c;如下表所示&#xff0c;则在平时记账时&#xff0c;系统会在凭证行项目中同时体现出多个本位币的金额。 图2.6.4-1 两个本位币的金额都会实时更新到科目余额中。因此&#xff0c;在月末可以直…

2024最新版守约者二级域名分发系统

主要功能 二级域名管理&#xff1a;我们的系统提供全面的二级域名管理服务&#xff0c;让您轻松管理和配置二级域名。 域名分发&#xff1a;利用我们先进的域名分发技术&#xff0c;您可以自动化地分配和管理域名&#xff0c;确保每个用户或客户都能及时获得所需的域名资源。 自…

虚幻引擎启动报错记录

0x00007FFEF0C8917C (UnrealEditor-CoreUObject.dll)处(位于 UnrealEditor.exe 中)引发的异常: 0xC0000005: 写入位置 0x0000000000000030 时发生访问冲突。 解决办法&#xff1a;首先查看堆栈信息&#xff0c;我的项目启动是因为默认场景编译不过&#xff0c;进到编辑器配置文…

08 Php学习:if语句、Switch语句

PHP 条件语句 当您编写代码时&#xff0c;您常常需要为不同的判断执行不同的动作。您可以在代码中使用条件语句来完成此任务。 在 PHP 中&#xff0c;提供了下列条件语句&#xff1a; if 语句 - 在条件成立时执行代码 if…else 语句 - 在条件成立时执行一块代码&#xff0c;…