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

news2024/11/19 22:45:48

数制转换

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

整数部分补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.coloradmin.cn/o/1351550.html

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

相关文章

TypeError: unsupported operand type(s) for +: ‘NoneType‘ and ‘str‘

报错 找到出错代码&#xff0c;发现默认值是None 解决 改为‘’即可

vba抓取网页数据

哈喽&#xff0c;哈喽&#xff0c;大家好&#xff01;大家2024发大财啦&#xff01; 不知道&#xff0c;平时大家爱不爱看电影呢&#xff1f;从今年的贺岁档的拍片来看&#xff0c;今年的电影还挺多&#xff0c;而且国产优秀电影居多&#xff0c;元旦假期期间我也去看了部喜剧…

【BCC动态跟踪PostgreSQL】

BPF Compiler Collection (BCC)是基于eBPF的Linux内核分析、跟踪、网络监控工具。其源码存放于GitCode - 开发者的代码家园 想要监控PostgreSQL数据库的相关SQL需要在编译PostgreSQL的时候开启dtrace。下文主要介绍几个和PostgreSQL相关的工具,其他工具可根据需求自行了解。 …

ChatGPT 进行 SEO的使用技巧

搜索引擎优化 (SEO) 是使网站对搜索引擎友好的一种不断发展的实践。 自搜索引擎和新兴技术的发展以来&#xff0c;它从未保持不变。 最近发布的 ChatGPT 是一种人工智能对话工具&#xff0c;似乎在搜索引擎优化方面有很好的应用。 从创建吸引人的标题到只需一个简短的提示就可…

Latex宏包gbt7714的格式问题:去掉OL

问题 采用bibtex来格式化文献&#xff0c;文献的格式采用gbt7714宏包来格式化。感谢宏包的作者和一种贡献者&#xff0c;效果非常好&#xff0c;用起来也很方便。 唯一一个我自己的问题&#xff0c;看不得文献索引后面[J/OL]中的OL。 网上搜索一圈&#xff0c;有一些办法&am…

echarts点击柱子、线节点、横坐标标签

echarts点击柱子、线节点、横坐标标签 x轴标签要为标签文字添加点击事件&#xff0c;必须先在xAxis里设置响应事件 xAxis: {triggerEvent: true, },然后直接监听 thisChart.on("click" ,function (params) {console.log(params) });通过params.componentSubType来…

三、C语言中的分支与循环—break和continue语句(8)循环结构 完

本章分支结构的学习内容如下&#xff1a; 三、C语言中的分支与循环—if语句 (1) 三、C语言中的分支与循环—关系操作符 (2) 三、C语言中的分支与循环—条件操作符 与逻辑操作符(3) 三、C语言中的分支与循环—switch语句&#xff08;4&#xff09;分支结构 完 本章循环结构的…

720VR全景通微信小程序商业运营版+多用户+云储存+大图切图效率高+完整的代码包以及搭建教程 功能强大

随着科技的飞速发展&#xff0c;虚拟现实技术已经逐渐融入我们的日常生活。其中&#xff0c;720VR全景技术以其独特的视角和沉浸式体验&#xff0c;受到了广泛的关注和应用。为了满足市场需求&#xff0c;春哥团队推出了720VR全景通微信小程序商业运营版&#xff0c;集多用户、…

基于PI控制的PMSM永磁同步电机控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 PMSM数学模型 4.2 矢量控制策略 4.3 PI控制器设计 4.4 控制系统实现 5.完整工程文件 1.课题概述 基于PI控制的PMSM永磁同步电机控制系统simulink建模与仿真。其中&#xff0c;基于PI&#xff08;…

使用UDP和JSON在C#中高效发送结构体数据

使用UDP和JSON在C#中高效发送结构体数据 引言 在许多网络编程场景中&#xff0c;我们经常需要在不同的应用程序或服务之间发送和接收数据。UDP&#xff08;用户数据报协议&#xff09;因其低延迟和少开销的特点&#xff0c;在需要快速数据传输的场景中非常有用。本文介绍了如何…

【FPGA/verilog -入门学习15】vivado FPGA 数码管显示

1&#xff0c;需求&#xff1a;使用xc720 开发板的8个数码管显示12345678 2&#xff0c;需求分析&#xff1a; 75hc595 1&#xff0c;74hc595驱动&#xff0c;将串行数据转换成并行输出。对应研究手册 2&#xff0c;发送之前将要发的数据&#xff0c;合并成高8位:SEG,低8位&…

【算法】利用分治思想解算法题:快排、归并、快速选择实战(C++)

1. 分治思想 介绍 分治法将问题划分成多个相互独立且相同或类似的子问题&#xff0c;然后递归地解决每个子问题&#xff0c;并将结果合并以得到原始问题的解。 分治思想通常包含以下三个步骤&#xff1a; 分解&#xff1a;将原始问题划分成多个规模较小、相互独立且类似的子…

如何恢复 iPhone 上永久删除的照片?

2007年&#xff0c;苹果公司推出了一款惊天动地的智能手机&#xff0c;也就是后来的iPhone。你会惊讶地发现&#xff0c;迄今为止&#xff0c;苹果公司已经售出了 7 亿部 iPhone 设备。根据最新一项调查数据&#xff0c;智能手机利润的 95% 都进了苹果公司的腰包。 如此受欢迎…

用户管理第2节课--idea 2023.2 后端--实现基本数据库操作(操作user表) -- 自动生成 --【本人】

一、插件安装 1.1 搜索插件 mybatis 安装 1.2 接受安装 1.3 再次进入&#xff0c;说明安装好了 1.4 与鱼皮不同点 1&#xff09;mybatis 版本不一致 鱼皮&#xff1a; 本人&#xff1a; 2&#xff09;鱼皮需重启安装 本人不需要 1.5 【需完成 三、步骤&#xff0c;再来看】 …

webpack 5 loader

webpack 本身不能识别js&#xff0c;json外的资源&#xff0c;所以我们需要借助其他loader来处理对应的文件 CSS Loader&#xff0c;处理css 安装 npm i css-loader style-loader -D css-loader 负责讲css编译成webpack能识别的模块内容style-loader 动态创建<style&g…

SQL之CASE WHEN用法详解

目录 一、简单CASE WHEN函数&#xff1a;二、CASE WHEN条件表达式函数三、常用场景 场景1&#xff1a;不同状态展示为不同的值场景2&#xff1a;统计不同状态下的值场景3&#xff1a;配合聚合函数做统计场景4&#xff1a;CASE WHEN中使用子查询场景5&#xff1a;经典行转列&am…

【PTA-C语言】实验八-函数与指针II

如果代码存在问题&#xff0c;麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 目录——实验八-函数与指针II 6-1 移动字母&#xff08;分数 10&#xff09;6-2 删除字符&#xff08;分数 10&#xff09;6-3 函数实现字符串逆序&#xff08;分数 10&#xff09;6-4 递归计算Ackermenn函数…

CTFshow web入门web127-php特性30

开启环境: extract() 函数从数组中将变量导入到当前的符号表&#xff0c;使用数组键名作为变量名&#xff0c;使用数组键值作为变量值 举例就是?a2&#xff0c;就会变成$a2&#xff0c;这里ctf_show有个_需要构造&#xff0c;前面说过php中变量名只有数字字母下划线&#xff…

BIND-DNS配置介绍

一、主要配置文件 /etc/named.conf options { //Option 段全部配置 listen-on port 53 { 127.0.0.1; };//表示BIND将在53端口监听&#xff0c;若需要对所有IP进行监听&#xff0c;则修改为// listen-on port 53 { any; }; directory "/var/named"…

WPF+Halcon 培训项目实战(11):HS组件封装

文章目录 前言相关链接项目专栏运行环境匹配图片封装组件新增类库项目选择依赖顺序并添加Nuget修改原本矩形方法运行结果&#xff1a; 对矩形进行抽象封装抽象基类矩形抽象改造 圆形抽象封装代码运行结果 前言 为了更好地去学习WPFHalcon&#xff0c;我决定去报个班学一下。原…