计算机组成原理历年考研真题对应知识点(数制与编码)

目录

2.1数制与编码

2.1.1进位计数制及其相互转换

【命题追踪——采用二进制编码的原因(2018)】

【命题追踪——十进制小数转换为二进制小数(2021、2022)】

2.1.2 定点数的编码表示

【命题追踪——补码的表示范围(2010、2013、2014、2022)】

【命题追踪——补码和真值的相互转换(2020、2023)】

【命题追踪——补码大小的判断(2015)】

2.1.3整数的表示

【命题追踪——机器码与补码、无符号数之间的转换(2021)】

2.1.4 C语言中的整数类型及类型转换

【命题追踪——int 型数据的表示范围(2017、2019)】

【命题追踪——有符号数与无符号数的相互转换(2011、2016、2019)】

【命题追踪——无符号数的零扩展(2012)】

【命题追踪——无符号数的零扩展(2012),补码的符号扩展(2021)】


2.1数制与编码

2.1.1进位计数制及其相互转换

命题追踪——采用二进制编码的原因(2018)】

在计算机系统内部,所有信息都是用二进制进行编码的,这样做的原因有以下几点。

1) 二进制只有两种状态,使用有两个稳定状态的物理器件就可以表示二进制数的每一位,制造成本比较低,例如用高低电平或电荷的正负极性都可以很方便地表示0和1。

2) 二进制位1和0正好与逻辑值“真”和“假”相对应,为计算机实现逻辑运算和程序中的逻辑判断提供了便利条件。

3) 二进制的编码和运算规则都很简单,通过逻辑门电路能方便地实现算术运算。

命题追踪——十进制小数转换为二进制小数(2021、2022)

一个十进制数转换为任意进制数,通常采用基数乘除法。这种转换方法对十进制数的整数部分和小数部分将分别进行处理,对整数部分采用除基取余法,对小数部分采用乘基取整法,最后将整数部分与小数部分的转换结果拼接起来。

【例 2.2】将十进制数 123.6875 转换成二进制数。

解:
除基取余法(整数部分):整数部分除基取余,最先取得的余数为数的最低位,最后取得的余数为数的最高位(即除基取余,先余为低,后余为高),商为0时结束。

整数部分:

因此整数部分 123=(1111011)₂。

乘基取整法(小数部分):小数部分乘基取整,最先取得的整数为数的最高位,最后取得的整数为数的最低位(即乘基取整,先整为高,后整为低),乘积为1.0(或满足精度要求)时结束。

小数部分:

因此小数部分0.6875=(0.1011)₂,所以 123.6875=(1111011.1011)₂。

注意:关于十进制数转换为任意进制数为何采用除基取余法和乘基取整法,以及所取之数放置位置的原理,请结合r进制数的数值表示公式思考,而不应死记硬背。

注意:在计算机中,小数和整数不一样,整数可以连续表示,但小数是离散的,所以并不是每个十进制小数都可以准确地用二进制表示

例如 0.3,无论经过多少次乘二取整转换都无法得到精确的结果。但任意一个二进制小数都可以用十进制小数表示,希望读者引起重视。

2.1.2 定点数的编码表示

命题追踪——补码的表示范围(2010、2013、2014、2022)

补码表示法中的加减运算统一采用加法操作实现。

正数的补码和原码相同,负数的补码等于模(n+1位补码的模为2ⁿ⁺¹)与该负数绝对值之差。

补码的定义如下:

综合上述定义可知,无论是正数还是负数,[x]补 = 2ⁿ⁺¹+x(-2ⁿ≤x<2ⁿ,mod 2ⁿ⁺¹)。

例如,若 x1 = +1010,x = -1101,字长为8位,则其补码表示为 [x1]补 = 0,0001010,[x2]补 = 2⁸ - 0,0001101= 1,1110011。

若字长为 n+1,则补码整数的表示范围为-2ⁿ≤x≤2ⁿ-1(比原码多表示“-2ⁿ”)。

几个特殊数据的补码表示

  • 1) [+0]补 = [-0]补 = 0,00...0 (含符号位共 n+1 个0),说明 0 的补码表示是唯一的。
  • 2) [-1]补 = 2ⁿ⁺¹-1 = 1,11...1(含符号位共n+1个1)。
  • 3) [2ⁿ-1]补 = 0,11..1(n个1),即n+1位补码能表示的最大整数。
  • 4) [-2ⁿ]补 = 1,00...0(n个0),即n+1位补码能表示的最小整数。

命题追踪——补码和真值的相互转换(2020、2023)

在日常生活中,通常用正号、负号来分别表示正数(正号可省略)和负数,如+15、-8等。

这种带“+”或“-”符号的数称为真值

真值转换为补码:对于正数,与原码的方式一样。

对于负数,符号位取1,其余各位由真值 “各位取反,末位加1” 得到。

补码转换为真值:若符号位为0,与原码的方式一样。

若符号位为1,真值的符号为负,数值部分各位由补码 “各位取反,末位加1” 得到。

命题追踪——补码大小的判断(2015)

  • ① 原码、补码、反码的符号位相同,正数的机器码相同。
  • ② 原码、反码的表示在数轴上对称,二者都存在 +0 和 -0 两个 0。
  • ③ 补码、移码的表示在数轴上不对称,零的表示唯一,它们比原码、反码多表示一个数。
  • ④ 整数的补码、移码的符号位相反,数值位相同。
  • ⑤ 负数的补码、反码末位相差1。
  • ⑥ 原码很容易判断大小。而负数的补码、反码很难直接判断大小,可采用如下规则快速判断:对于负数,数值位部分越小,其绝对值越大,即负得越多。

2.1.3整数的表示

命题追踪——机器码与补码、无符号数之间的转换(2021)】

当一个编码的全部二进制位均为数值位而没有符号位时,该编码表示就是无符号整数,简称无符号数。此时,默认数的符号为正。

因为无符号整数省略了一位符号位,所以在字长相同的情况下,它能表示的最大数比有符号整数能表示的大。

一般在全部是正数运算且不出现负值结果的场合下,使用无符号整数表示。例如,可用无符号整数进行地址运算,或用它来表示指针。

例如,对于8位无符号整数,最小数为0000 0000(值为0),最大数为1111 1111(值为2⁸-1=255),即表示范围为0~255;

而对于8位有符号整数,最小数为1000 0000(值为-2⁷= -128),最大数为 0111 1111(值为2⁷-1=127),即表示范围为-128~127。

2.1.4 C语言中的整数类型及类型转换

命题追踪——int 型数据的表示范围(2017、2019)

C语言中的整型数据就是定点整数,根据位数的不同,可分为字符型(char,8位)、短整型(short 或 shont int, 16 位)、整型(int,32 位)、

长整型(long 或 long int,在 32 位机器中为 32位,在 64 位机器中为 64 位)。

char 是整型数据中比较特殊的一种,其他如 short/int/long 等不指定signed/unsigned 时都默认是有符号整数,但 char 默认是无符号整数

无符号整数(unsigned short/intlong)的全部二进制位均为数值位,没有符号位,相当于数的绝对值。

signed/unsigned 整型数据都是按补码形式存储的,只是 signed 型的最高位代表符号位,而在unsigned 型中表示数值位,因此这两者所表示的数据范围也有所不同。

命题追踪——有符号数与无符号数的相互转换(2011、2016、2019)

C语言允许在不同的数据类型之间做类型转换

强制类型转换格式为“TYPE b=(TYPE) a”,强制类型转换后,返回一个具有 TYPE 类型的数值,这种操作并不会改变操作数本身。

先看由 short 型转换到 unsigned short 型的情况。考虑如下代码片段:

int main(){
short x= -4321;
unsigned short y=(unsigned short) x;
printf("x=%d,y=%u\n",x,y);
}

有符号数 x 是一个负数,而无符号数 y 的表示范围显然不包括 x 的值。

在采用补码的机器上,上述程序会输出如下结果:

x = -4321,y = 61215

输出的结果中,得到的 y 值似乎与原来的 x 没有一点关系。不过将这两个数转换为二进制表示时,我们就会发现其中的规律,如表 2.1所示。

观察可知,将 short 型强制转换为 unsigned short 型只改变数值,而两个变量对应的每位都是一样的。

通过本例可知,强制类型转换的结果是保持位值不变,仅改变了解释这些位的方式

再看由 unsigned short 型转换到 short 型的情况。考虑如下代码片段:

int main(){
unsigned short x=65535;
short y= (short)x;
printf("x=%u,y=%d\n",x,y);
}

 同样在采用补码的机器上,上述程序会输出如下结果:

x = 65535,y = -1

把这两个数转换为二进制表示,同样可以证实之前的结论。

因此,有符号数转换为等长的无符号数时,符号位解释为数值的一部分,负数转换为无符号数时数值将发生变化。

同理,无符号数转换为有符号数时最高位解释为符号位,也可能发生数值的变化。

注意:若同时有无符号数和有符号数参与运算,则C语言标准规定按无符号数进行运算

命题追踪——无符号数的零扩展(2012)

另一种常见的运算是在不同字长的整数之间进行类型转换。

先看大字长变量向小字长变量转换的情况。考虑如下代码片段: 

int main(){
int x=165537,u=-34991;        //int型占用4B
short y=(short)x,v=(short)u;  //short型占用2B
printf("x=%d,y=%d\n", x, y);
printf("u=%d,v=%d\n", u, v);
}

运行结果如下:

x = 165537, y = -31071

u = -34991, v = 30545

其中 x,y,u,v的十六进制表示分别为 0x000286a1,0x86a1,0xffff07751,0x7751,观察上述数字很容易得出结论,当大字长变量向小字长变量强制类型转换时,系统把多余的高位部分直接截断,低位部分直接赋值,因此也是一种保持位值的处理方法。

再看小字长变量向大字长变量转换的情况。考虑如下代码片段:

int main(){
short x=-4321;
int y=x;
unsigned short u=(unsigned short)x;
unsigned int v=u;
printf("x=%d,y=%d\n", x, y);
printf("u=%u,v=%u\n", u, v);
}

运行结果如下:

x = -4321, y = -4321
u = 61215, v = 61215

命题追踪——无符号数的零扩展(2012),补码的符号扩展(2021)

x,y,u,v的十六进制表示分别为 0xef1f,0xffffef1f,0xef1f,0x0000ef1f。

由本例可知,小字长到大字长的转换时,不仅要使相应的位值相等,还要对高位部分进行扩展。

若原数字是无符号整数,则进行零扩展,扩展后的高位部分用0填充。否则进行符号扩展,扩展后的高位部分用原数字符号位填充。

其实两种方式扩展的高位部分都可理解为原数字的符号位。

这与之前的三个例子都不一样,从位值与数值的角度看,前三个例子的转换规则都是保证相应的位值相等,而小字长向大字长的转换,在位值相等的条件下还要补充高位的符号位,可以理解为数值的相等。

注意,char 型为 8 位无符号整数,其在转换为 int 型时高位补0即可。

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

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

相关文章

Debian/Ubuntu linux安装软件

1、官方软件商店安装 2、deb包安装 报错不是sudoers&#xff0c;首先将用户添加到sudo su -l adduser USERNAME sudo exit然后&#xff0c;退出桌面环境并再次登录。 您可以通过输入以下内容来检查上述过程是否成功&#xff1a; groups下载deb包 altshiftf4或右键打开命令行…

【第16章】Vue实战篇之跨域解决

文章目录 前言一、浏览器跨域二、配置代理1.公共请求2.代理配置 总结 前言 前后端项目分离衍生出浏览器跨域问题&#xff0c;开发之前我们通过配置代理解决这个问题。 一、浏览器跨域 浏览器的跨域问题主要是由于浏览器的同源策略导致的。同源策略是浏览器的一个安全功能&…

XZ后门故事:初始分析

2024年3月29日&#xff0c;Openwall OSS安全邮件列表上的一条消息“炸醒”了整个信息安全、开源和Linux社区&#xff1a;XZ出现了一个CVSS评分10.0的恶意后门。 这个后门库的特殊危险在于OpenSSH服务器进程sshd使用它。在多个基于systemd的发行版上&#xff08;包括Ubuntu、De…

信用VS抵押:贷款的两面镜子

说到贷款这事儿&#xff0c;大家首先想到的可能是有稳定工作、房子或车子的人。 其实&#xff0c;没这些也能贷款&#xff0c;比如咱们还在学校时&#xff0c;银行就来办信用卡了&#xff0c;这就是信用借款的起点。 毕业后&#xff0c;刚工作没钱又想闯&#xff0c;不少人宁愿…

C# 通过Win32API设置客户端系统时间

在日常工作中&#xff0c;有时可能会需要获取或修改客户端电脑的系统时间&#xff0c;比如软件设置了Licence有效期&#xff0c;预计2024-06-01 00:00:00到期&#xff0c;如果客户手动修改了客户端电脑时间&#xff0c;往前调整了一年&#xff0c;则软件就可以继续使用一年&…

【产品经理】订单处理4-拆单策略

上次讲解了订单的促销策略&#xff0c;本次讲解下订单处理过程中的拆单策略。 订单拆单策略分为自动拆单、手动拆单&#xff0c;拆单时机也分为订单未被审核前拆单、订单审核后因仓库/快递情况的拆单&#xff0c;本次主要讲解订单未被审核前拆单、订单审核后快递超重的拆单&am…

SQL注入-上篇

SQL注入 注入是web安全的头号大敌。注入攻击漏洞往往是应用程序缺少对输入进行安全性检查所引起的。攻击者把一些包含攻击代码当做命令或者查询语句发送给解释器&#xff0c;这些恶意数据可以欺骗解释器&#xff0c;从而执行计划外的命令或者未授权访问数据。注入漏洞通常能sq…

前端构建工具用得好,构建速度提升 10 倍

今天来盘点一下前端构建工具。 Turbopack Turbopack&#xff0c;由Vercel开源&#xff0c;是下一代高性能的JavaScript应用构建工具&#xff0c;目前用于 Next.js 中。Turbopack旨在通过革新JavaScript应用的打包流程来显著提升应用性能&#xff0c;它专注于缩短加载时间&…

分析线程池的构造过程,追踪核心成员变量

分析线程池的构造过程,追踪核心成员变量 1、背景2、核心参数3、这样设计的好处1、背景 上图是对线程池原理的一个详细的表达,它体现了线程池的几个核心概念,具体是哪些概念呢,让我们一起来探索。 2、核心参数 首先通过对Executors创建线程池的方法签名的分析,我们会发现…

简单一招实现计件工资的核算

现在很多工厂都采用计件工资的管理办法&#xff0c;这充分体现了多劳多得、按劳取酬的薪资分配原则&#xff0c;同时鼓励先进鞭策后进&#xff0c;奖勤罚懒&#xff0c;摒弃计时工资的“大锅饭”心态&#xff0c;提高了企业的整体运作效率。 计件工资的难题 但是在实际的操作中…

马斯克的薪酬风波:一场560亿的激励之战

引言 在2024年的特斯拉股东大会上&#xff0c;埃隆马斯克成功获得了价值560亿美元的薪酬激励&#xff0c;这一事件引起了广泛关注和讨论。这次股东大会不仅标志着特斯拉在AI和机器人领域的战略布局&#xff0c;同时也揭示了马斯克在公司治理和薪酬激励机制中的独特策略。本文将…

第2讲:pixi.js 绘制HelloWorld

基于第0讲和第1讲&#xff0c;我们增添了vite.config.ts文件。并配置了其他的http端口。 此时&#xff0c;我们删除掉没用的东西。 删除 conter.ts、typescript.svg 在main.ts中改成如下内容&#xff1a; import {Application, Text} from pixi.js import ./style.css// 指明…

“深入探讨Redis主从复制:原理、配置与优化“

目录 # 概念 1. 配置主从同步步骤 1.1 创建文件夹 1.2 复制配置文件 1.3 配置文件关闭 1.4 查看端口号&#xff0c;发现端口号存在 1.5 连接三个端口号 1.6 查看主机运行情况 1.7 让服务器变成&#xff08;主机&#xff09;或&#xff08;从机&#xff09; 1.8 实现效…

关于禁止word的无用插入模式

这是我的word版本号 点击左上角文件选项 找到左侧最下方的选项 点击高级 把这两个叉掉

ssm宠物网站系统-计算机毕业设计源码07183

摘 要 在信息飞速发展的今天&#xff0c;网络已成为人们重要的信息交流平台。宠物网站每天都有大量的信息需要通过网络发布&#xff0c;为此&#xff0c;本人开发了一个基于B/S&#xff08;浏览器/服务器&#xff09;模式的宠物网站系统。 该系统以JJava编程语言、MySQL和SSM框…

2024年6月17日 (周一) 叶子游戏新闻

期刊杂志: 聚合读者、意林、知音、故事会、花火以及国内各大知名报纸电子版&#xff0c;无需付费即可观看各种免费资源 中医自学宝典: 集合了中医医案&#xff0c;医经&#xff0c;方剂 药材知识的app&#xff0c;更方便的免费学习中医知识 《最终幻想7》重制三部曲总监鸟山求&…

指定导师申请成功|普通高校教师省公派英国曼彻斯特大学访学交流

Q老师的预期目标是世界排名Top100高校&#xff0c;且提供了心仪课题组的导师名单&#xff0c;希望借助我们丰富的资源和专业的申请经验&#xff0c;实现既定目标。我们没有辜负其委托&#xff0c;落实了美国加州大学洛杉矶分校和英国曼彻斯特大学访问学者职位&#xff0c;而曼大…

【自动驾驶】ROS小车系统介绍

文章目录 小车组成轮式运动底盘的组成轮式运动底盘的分类轮式机器人的控制方式感知传感器ROS决策主控ROS介绍ROS的坐标系ROS的单位机器人电气连接变压模块运动底盘的电气连接ROS主控与传感器的电气连接运动底盘基本组成电池电机控制器与驱动器控制器与运动底盘状态数据&#xf…

大学课设项目,Windows端基于UDP的网络聊天程序的服务端和客户端

文章目录 前言项目需求介绍一、服务端1.对Udp套接字进行一个封装2. UdpServer的编写3. Task.h4.protocol.h的编写5.线程池的编写6.main.cc 二、客户端1. Socket.h2.protocol.h3.UdpClient4.menu.h5.main.cpp 三、运行图 前言 本次项目可以作为之前内容的一个扩展&#xff0c;学…