王道考研计算机组成原理——数据的表示和运算

数制转换

任意进制》十进制:位权*位数即可

整数部分补0是补在头部,小数部分补0是补在尾部 

一般都是先把十进制》二进制;然后二进制再转换成8/16进制这样子 

一种更快的方法->拼凑法:小数部分整数部分都可以这样求

一般都是先把十进制》二进制;然后二进制再转换成8/16进制这样子

正负号需要被数字化:需要被转换成0/1 

BCD码

BCD8421码:如果两个数相加落到了一个非法区间内(1010-10010),就加上6进行修正 

8421指的是每一位的权重

无符号整数 

机器字长:计算机进行一次整数运算所能处理的二进制数据的位数,也就是计算机的位数

一个二进制数取反后和原来的数相加结果就是全1,再加1就是每位全0对应的是相反数的代数和是0
减去一个数等于加上这个数的负数,即反码加一

减法》加上负数(注意位数一定要对齐!!!)

有符号整数 

原码、反码、补码

计算机内部的数都是使用补码存储,但是原码》补码需要先转换成反码

原码》反码:正数、负数 

符号位不变,其余位按位取反

补码》反码:反码》原码》反码

原码《》补码快速转换的方法:

使用补码之后,所有的比特位都用同样的规则去处理,这是计算机非常喜欢做的事

补码的数值位就不能解读为权值了

有符号数补码的加法直接相加就行,得到的当然也是补码了

引入补码最根本的原因:符号位也可以参与运算

补码的加减运算

 

移码 

答案:

定点小数的计算

加法器

M=1表示这是一个逻辑运算,M=0表示这是一个算术运算

机器字长的本质就是ALU同时支持输入多少bit的信息,然后据此设置各个寄存器的长度

加法器的设计

并行加法器的优化 

只有两个符号相同的数相加的时候才会发生溢出

有符号数的加减法运算

溢出判断 

方法三:双符号位补码

上溢:整数超过上限,下溢:负数超过下限

定点小数的符号扩展问题:

标志位的生成

无论是有符号数的加减运算还是无符号数的加减运算,在底层都是用同一套电路来实现的

无符号数加减运算使得OF=1也是没有意义的

OF=最高位产生的进位 异或 次高位产生的进位

重点是OF SF ZF

各种移位操作 

符号位不变,数值位进行移位

原码的移位:左移(低位补0,高位舍去)右移:(低位舍弃,高位补0)

补码的移位:

正数的补码:和原码一样,左右移都补0

负数的补码:左移补0,右移补1 

逻辑移位不管左移右移都是补0,而算术移位需要具体看符号位

所以为啥不直接mov?

循环移位:n次移位

带进位位也是一样,CF也要参与循环移位

定点数原码乘法运算 

 

被乘数X固定,每次都是同一个

MQ的最后一位就是本次参与乘法的一位

先加法再移位,重复n次,ACC是逻辑右移,移动之后,最低位移动到MQ当中

每次加法之后一定要先移位

整数的乘法也和小数的乘法是类似的 

定点数补码乘法运算

补码的乘法是算术右移,而原码是逻辑右移

MQ真正的最低位是辅助位,辅助位是多出来的一位,我们为了和前面统一,最低位

由于MQ当中多了一位辅助位,为了使CPU寄存器的位数保持一致,其他寄存器采用双符号位补码运算

原码的乘法运算MQ和X寄存器当中存放的是乘数和被乘数的绝对值,而在补码乘法当中直接把完整的补码给存进来了(包含符号位)

被乘数是双符号位的补码,乘数是单符号位的补码

定点数原码除法运算 

  

定点小数无法表示大于1的小数

建议手算模拟一遍左边红框内容: 

果然搞错了。。。:

最终结果:

实现思路:

定点数补码除法运算 

C语言中的强制数据类型转换

注:计算机底层所有的定点整数都是使用补码存储

无符号数《》有符号数:不改变数据内容,只改变解释方式

长整数int变成短整数short:直接高位截肢,只保留低位

短整数变长整数:符号扩展

①有符号数0xef1f:符号位全补1(是0是1根据具体情况而定)

②无符号数0xef1f:符号位全补0

大端小端模式 

小端模式便于机器阅读(机器也是从低地址往高地址读取的),比如只需要读入1个字节,直接读低地址的67H它不香吗?😂😂😂 

使用小端存储的方式,计算机首先从内存里读入的,就是最初、最应该先被处理的字节,所以小端存储的方式会更便于计算机处理

符合人类直觉的12345678就是大端模式

最后都要转换成按字节寻址(逻辑左移) 

比如:int*p=MyStuct;p++;

最终p++的实现需要p+(1<4)

这里有歧义,word是2个字节,dword才是四字节吧?

按照4字节对齐,每次操作都只需要一次访存!!!如果不按照4字节对齐的话,word和dword可能面临两次访存的额外开销!所以计算机设计时一般考虑空间换时间

浮点数的表示

 

long:八字节的定点整数

定点数的局限性:

a: 

b的尾数多了一位,只能舍弃,导致丢失精度

那么如何在存储空间一定的情况下(比如都是1B)尽可能地去保留它的精度呢?

对于b来说第一个位是符号位必须保留,而小数点后面的0是无效值可以丢弃

算术左移,阶码-1(010->001);数字右移相当于小数点左移,所以阶码得减去移动的位数

浮点数的规格化

当浮点数运算的结果尾数出现溢出的时候(双符号位位01/10),使用双符号位可以纠正这次溢出 

规格化:科学计数

规格化之后的浮点数的特点:

最大正数:2^1+2^2+...+2^n=1-2e-n 》0.111111...

最小正数:1/2 》0.100000...

负数:直接对不等号取反即可

补码的形式:便于计算机硬件判断这个浮点数是否已经被规格化

规格化后:0.011;1.0100000

IEEE754标准

由于寄存器只有8位,所以mod 2^8不影响

0放在正数那里,所以是-128-127,其中-128和-127用作别的功能

偏置值:2^(E-1)-1=127/1023

阶码真值计算的时候,可以使用移码和偏移量的真值相减 

阶码=真值+偏置值

IEEE:移码=阶码真值+偏移量

一律先规格化!!!

移码可以直接看作无符号数

浮点数的运算 

小阶向大阶对齐是为了方便计算机对尾数进行处理 

阶码的溢出才是真正的溢出,尾数的溢出是假溢出,因为还可以通过双符号位的规格化来纠正

-Y的补码:包括符号位在内,按位取反再+1

根据双符号位的最高位

因为尾数保留的是定点小数,所以要把尾数转换成0.XXX

各种数据类型转换

g无损转换

float》int:只保留整数部分,小数部分全部砍掉,所以会损失精度

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

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

相关文章

挑战Python100题(9)

100+ Python challenging programming exercises 9 Question 81 Please write a program to randomly print a integer number between 7 and 15 inclusive. Hints: Use random.randrange() to a random integer in a given range. 请编写一个程序,随机打印一个介于7和15之间…

Single-Image Crowd Counting via Multi-Column Convolutional Neural Network

Single-Image Crowd Counting via Multi-Column Convolutional Neural Network 论文背景人群密度方法过去的发展历史早期方法基于轨迹聚类的方法基于特征回归的方法基于图像的方法 Multi-column CNN用于人群计数基于密度图的人群计数通过几何自适应核生成密度图密度图估计的多列…

Rhel8安装Postgres

前提 实际上安装数据库的过程大同小异&#xff0c;只要linux的代差和数据库代差不是大的离谱的话都是同样的操作流程 本次工作环境是RHEL8.8&#xff0c;类推RHEL7&#xff0c;8&#xff0c;9没有问题 使用postgre是13版本&#xff0c;话说中文社区只更新到12版本 安装步骤…

ChatGPT在金融财务领域的10种应用方法

1.生成报告 在金融领域中&#xff0c;最耗时的任务之一是报告生成。通过ChatGPT&#xff0c;您可以在一定程度上自动化这个过程。这款人工智能工具可以获取关于公司财务表现的结构化数据&#xff0c;并生成一份书面摘要&#xff0c;详细说明关键点、趋势和观察结果。这个功能在…

【论文+在线运行】AnyText:能准确写汉字的AI绘图工具

源码&#xff1a;https://github.com/tyxsspa/AnyText 阿里在线运行: https://modelscope.cn/studios/damo/studio_anytext/summary 论文&#xff1a;2311.AnyText: Multilingual Visual Text Generation And Editing 一、AnyTexT是什么&#xff1f; 是一个基于扩散模型的&am…

ATE自动测试设备是什么?如何帮助测试电源反复短路?

什么是电源反复短路测试? 反复短路测试是电源极限测试项目之一&#xff0c;是在各种输入和输出状态下将电源输出短路&#xff0c;反复多次短路测试&#xff0c;检测电源是否可以实现保护或回缩&#xff0c;测试结束后之后&#xff0c;电源是否可以自动恢复正常运行。反复短路测…

python初试终章

之前在单机上实现了一个Django服务器&#xff0c;现在我们可以把这个服务器推上一个云平台。这里我选择使用阿里云。 阿里云准备 在阿里云官网(aliyun.com)页面注册阿里云账号。登录后选择云服务器ECS&#xff0c;并选择“创建实例”&#xff1a; 选择操作系统Ubuntu 14.04 …

Java原生启动Tomcat

文章目录 引入依赖启动Tomcat代码示例将嵌入式 Tomcat 服务器用于已有的 WAR 文件为现有的 Java Web 应用程序嵌入 Tomcat 服务器 相关APITomcat APIContonxt API 启动错误springboot底层Tomcat的实现学习博客 引入依赖 maven: <dependency><groupId>org.apache.…

python 深度学习 记录遇到的报错问题10

本篇继python 深度学习 解决遇到的报错问题9_module d2l.torch has no attribute train_ch3-CSDN博客 一、CUDA error: no kernel image is available for execution on the device CUDA kernel errors might be asynchronously reported at some other API call,so the stackt…

数据结构【图篇】

数据结构【图篇】 文章目录 数据结构【图篇】前言为什么突然想学算法了&#xff1f;为什么选择码蹄集作为刷题软件&#xff1f; 目录一、图(一)、图的存储(二)、图的基本操作(三)、最短路径问题 二、拓扑排序三、结语 前言 为什么突然想学算法了&#xff1f; > 用较为“官方…

【PHP】判断字符串是否是json类型,并判断是否是有效数组

要在 PHP 中判断给定的字符串是否是 JSON&#xff0c;可以使用 json_decode() 函数和检查返回值的类型。以下是一个示例&#xff0c;展示了如何判断给定的字符串是否是 JSON&#xff0c;以及如何判断它是数组还是字符串&#xff1a; <?phpfunction isJson($string) {json_…

金融追梦者,向着春天出发——社科院与美国杜兰大学金融管理硕士

随着时代的进步和社会的变迁&#xff0c;教育已经不再是单纯的学生时代的事情&#xff0c;而是贯穿人的一生。特别是在金融行业&#xff0c;由于其变幻莫测的特性&#xff0c;在职继续攻读硕士学位的人越来越多。他们希望通过进一步的学习和研究&#xff0c;提升自己的专业素养…

transformers Trainer自定义optimizer和scheduler

1.需求 我自定义了一个evaluate方法&#xff0c;想在每一轮训练过后都执行一次。如果只是在TrainingArguments里设置warmup_steps100&#xff0c;那么每轮都会重置学习率&#xff0c;也就是每一轮开始的时候都会按照warmup刚开始的学习率进行训练&#xff0c;这就很头疼。 2.…

【双指针算法】-- 左右指针

左右指针 前言一、双指针算法二、左右指针1.用于在已排序数组中找到两个数使其和为特定值2.在字符串中判断是否为回文 总结 前言 今天在刷Leetcode的时候觉得自己双指针掌握的还是不错的记录一下,写个学习笔记,也方便以后翻阅,如果也帮助到你了,那真是太好啦! 本篇介绍的是左右…

js创建服务器,以及对接口的理解和创建

// 创建服务 const app http.createServer((req, res)>{ // 设置给前端返回信息的字符编码 res.setHeader(content-type, text/html; charsetutf-8) let address req.url.split(?)[0] //首先创建一个数组&#xff0c;后面把它的数据放在JSON文件 let…

医院配电能效监管方案

摘要:本文以医院能源监管系统为研究对象,采用智能化技术组建数据库、构建智能化的能耗信息管理系统,实现对医院的能源利用状况进行实时、准确的动态监管。具体而言,该系统建设的主要功能是对医院的能源消耗进行采集、上报、汇总与分析,并生成动态的数据和报表曲线,以及利用分析…

js实现将一张红色透明图改成黑色

获取到像素点&#xff0c;遇到255红色rgb的改为黑色0 ps:红色的rgb为255 0 0 function test(base64) {// 创建一个Canvas元素var canvas document.createElement("canvas");var context canvas.getContext("2d");var redStamp new Image();redStamp.src…

如何在Windows Redis中设置密码?

https://www.python100.com/html/3NQ9A968M2JX.html springboot 工程配置文件 application.yml 中配置如下 redis: timeout: 50000 port: 6379 host: 127.0.0.1 password: 123456 注意 password: 123456 冒号后有空格

SAP ABAP ZPL打印

前言 本文用于简单介绍在SAP中使用ZPL语言进行打印的开发步骤&#xff0c;由于对ZPL语言并不是很熟悉&#xff0c;所以ZPL相关的部分并不会很深入&#xff0c;主要介绍在SAP端如何动态填充ZPL内容及预览、打印。 什么是ZPL ZPL是斑马条码打印机工业型号用的编程语言。利用这些…

M3u8视频地址如何转为mp4视频

在当今数字化的时代&#xff0c;视频格式的转换已成为日常需求。M3u8格式的视频由于其分段的特性&#xff0c;常常给播放和编辑带来不便。而MP4格式则因其通用性和高质量而广受欢迎。那么&#xff0c;如何将M3u8视频地址转换为MP4格式呢&#xff1f;接下来&#xff0c;我们将为…