当前位置: 首页 > news >正文

计算机组成学习-数据的表示和运算总结

 复习本章时,思考以下问题:

  • 1)在计算机中,为什么要采用二进制来表示数据?
  • 2)计算机在字长足够的情况下能够精确地表示每个数吗?若不能,请举例说明。
  • 3)字长相同的情况下,浮点数和定点数的表示范围与精度有什么区别?
  • 4)用移码表示浮点数的阶码有什么好处?

目录

 1、进制与编码

1.1 进位计数法

1.2 不同进制数之间的相互转换

(1)二进制混合数转化为八进制或16进制

(2) 十进制数转换为任意进制数

1.3 定点数的编码表示

1.3.1 原码

1.3.2 反码

1.3.3 补码

1.3.4 移码

2、运算方法和运算电路

3、整数的表示和运算

4、 浮点数的表示与运算

 5、校验码(数据校验)

5.1 奇偶校验码

5.2海明校验码

5.3 循环冗余校验码(CRC)

2、数据的表示与运算

 2.1、进制与编码

 

2.1.1 进位计数法

常用的进位计数法有十进制、二进制、八进制、十六进制等。十六进制每个 数位可取0〜9、A、B、C、D、E、F中的任意一个,其中A、B、C、D、E、F分别表示 10〜15。

八进制数字通常以前缀 "0"(零)加上数字表示,例如,八进制数 12 表示为 014。在JavaScript中,你可以使用前缀 "0o" 或 "0O" 来表示八进制数。例如:0o14

十六进制数字通常以前缀 "0x" 或 "0X" 开头表示,例如,十六进制数 1A 表示为 0x1A

 

2.1.2 不同进制数之间的相互转换

(1)二进制混合数转化为八进制或16进制

对于一个二进制混合数(既包含整数部分,又包含小数部分),在转换时应以小数点为界。 其整数部分,从小数点开始往左数,将一串二进制数分为3位(八进制)一组或4位(十六进制) 一组,在数的最左边可根据需要加“0”补齐;对于小数部分,从小数点开始往右数,也将一串 二进制数分为3位一组或4位一组,在数的最右边也可根据需要加“0”补齐。

(2) 十进制数转换为任意进制数

 

 (3)BCD码:二进制编码的十进制数

2.3 定点数的编码表示

定点数编码表示法主要有以下4种:原码、 补码、反码和移码。

1.3.1 原码

用机器数的最高位表示数的符号,其余各位表示数的绝对值。

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

1.3.2 反码

正数反码的定义和相应的补码(或原码)表示相同。负数反码的定义在绝对值按位求反。

0的表示不唯一(即存在正负0);

1.3.3 补码

对于正数,与原码的方式一样。对于负数,符号位取1,其余各位由真 值“各位取反,末位加1”得到。补码转换为真值,若符号位为0,与原码的方式一样。若符号位为1,真值的符号为负,数值部分各位由补码“各位取反,末位加1”得到。

 0的表示唯一

1.3.4 移码

移码就是在真值X上加上一个常数(偏置值)。如果机器字长为n,偏移值为2^{n-1}

 

2.4、运算方法和运算电路

(有需要再弄懂)

此ALU的核心是带标志加法器

2.5、整数的表示和运算

(有需要再弄懂)

有符号数和无符号数的转换

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

不同字长整数之间的转换,当大字长变量向小字长变量强制类型转换时,系统把多余的高位部分直接截 断,低位直接赋值,因此也是一种保持位值的处理方法。而短字长到长字长的转换,在位值相等的条件下还要补充高位的符号位,可以理解为数值 的相等。

2.6、 浮点数的表示与运算

 浮点数的运算:1. 对阶,2. 尾数求和,3. 规格化,4. 舍人,5. 溢出判断

 2.7、校验码(数据校验)

  • 数据校验原因:为减少和避免数据在计算机系统运行或传送过程中发生错误,在数据的编码上提供了检错和纠错的支持。
  • 数据校验码的定义:能够发现某些错误或具有自动纠错能力的数据编码;
  • 数据校验的基本原理是扩大码距;码距为任意两个合法码之间不同的二进制位的最少位数;仅有一位不同时,称其码距为1。码距大于等于2的数据校验码开始具有检错的能力。码距越大,检错、纠错能力越强。

2.7.1、 奇偶校验码

  • 原编码上加一个校验位,码距等于2!一般校验位设置在原编码的最左边或最右边
  • 奇校验码:整个校验码(信息位+校验位)中1的个数位奇数
  • 偶校验码:整个校验码(信息位+校验位)中1的个数位偶数
  • 只能发现奇数个错误,不能纠错。
  • (1)奇校验
 (2)偶校验

2.7.2、海明校验码

在奇偶校验的基础上增加校验位而得;具有检错和纠错的能力;

设K为有效信息的位数,r为校验位的位数,则整个码字的位数N应满足不等式:N=K+r≦2r-1   通常称为(N,K)海明码设某(7,4)海明码表示的码字长度为   7   位,校验位数为     3 位。

 

  • 若S1S2S3=000,则说明无错,否则说明出错。这个数的值就是出错的位置,如S1S2S3=010,表示第010位出错,即H2出错,直接将该位取反就可以达到纠错的目的。

2.7.3、 循环冗余校验码(CRC)

在K位信息位后拼接R位检验位,组成CRC码,这种编码也称(N,R)码

通过模2的除法运算建立数据信息和校验位之间的约定关系;具有很强的检错纠错能力。
通过例题来理解

例题: 设生成多项式G(x)=X^3+X^2+1 ,信息码为 101001 ,求对应的CRC码 。

  •  首先,发送端和接受端会有一个生成多项式G(x)约定,生成多项式G(x)的最高次幂为R。任意一个二进制数码都可用一个系数为0或1的多项式与之对应。比如:二进制数码 1101 对应的G(x)=1*X^3+1*X^2+0*X^1+1*X^0= X3+X2+1  检验位为3
  • 在发送端,将要传送的K位二进制信息码左移R位,低位补0。将它与生成多项式G(x)所对应的的二进制数码进行模2除法,除数位多项式系数( 1101),产生余数( 3位检验位)位一个R位检验码,并附在信息码后,构成一个新的二进制码(CRC)码,共K+R位。

 

  • 接收端收到CRC码后,用生成的CRC码除以生成多项式G(x)所对应的的二进制数码,若余数为0,则信息码在传输过程中没有产生错误,数据正确。
  • 若接受到的CRC码为C9C8C7C6C5C4C3C2C1= 101001011,除以G(x)所对应的二进制码1101得到余数为010,不为0,说明数据在传输过程中产生错误。010=2(10)说明C2出错,将C2取反即可纠正错误。

2.8、复习

2.8.1、为什么要采用二进制来表示数据?

采用二进制,只有0和1两个状态,能够表示0、1两种状态的电子器件很多。而且简化,电平变化明显。

2.8.2、计算机在字长足够的情况下能够精确地表示每个数吗?若不能,请举例说明。

计算机采用二进制来表示数据,在字长足够时,可以表示任何一个整数。

而二进制表示小数,即使字长很长,也不可能精确表示出所有小数,只能无限逼近。例如0.1就无法用二进制精确地表示。

2.8.3、字长相同的情况下,浮点数和定点数的表示范围与精度有什么区别?

字长相同时,浮点数取字长的一部分作为阶码,所以表示范围比定点数要大,而取一部分作为阶码也就代表着尾数部位的有效位数减少,而定点数字长的全部位都用来表示数值本身,精度要比同字长的浮点数更大

编码位数一定,编码出来的数据个数就是一定的。m位编码只能表示2m个数,所以对于相同位数的定点数和浮点数来说,可表示的数据个数应该一样多。

2.8.4、用移码表示浮点数的阶码有什么好处?

移码的两个好处
浮点数进行加减运算时,时常要比较阶码的大小,相对于原码和补码,移码比较大小更方便
②检验移码的特殊值(0和max)时比较容易。

2.8.5、如何表示一个数值数据?计算机中的数値数据都是二进制数吗?

计算机中的数值数据虽然都用二进制来编码表示,但不全是二进制数,也有用十进制数(二进制编码的十进制数)表示的

2.8.6、在高级语言编程中所定义的 unsigned/short/int/long/float/double型数据是怎么表示的?什么称为无符号整数的“溢出”?

unsigned型数据就是无符号整数,不考虑符号位。直接用全部二进制位对数值进行编码得到的就是无符号数,一般都用补码表示。

int型数据就是定点整数,一般用补码表示。int型数据的位数与运行平台和编译器有关,一般是32位或16位。例如,真值是-12的int型整数,在机器内存储的机器数(假定用32位寄存器寄存)是1111-1111-1111-1111-1111-1111-1111-0100

long型数据和short型数据也都是定点整数,只是位数不同,分别是长整型和短整型数,通常用补码表示。

float型数据是用来表示实数的浮点数。现代计算机用IEEE754标准表示浮点数,其中32位单精度浮点数就是float型,64位双精度浮点数就是 double型。

需要注意的是,C语言中的int型和 unsigned型变量的存储方式没有区别,都按照补码的形式存储,在不溢出范围内的加减法运算也是相同的,只是int型变量的最高位代表符号位,而unsigned型中的最高位表示数值位,两者在C语言中的区别体现在输出时到底是采用%d还是采用%u。

对于无符号定点整数来说,若寄存器位数不够,则计算机运算过程中一般保留低n位,舍弃高位。这样,会产生以下两种结果。
①保留的低n位数不能正确表示运算结果。在这种情况下,意味着运算的结果超出了计算机所能表达的范围,有效数值进到了第n+1位,称此时发生了“溢出”现象
②保留的低n位数能正确表达计算结果,即高位的舍去并不影响其运算结果。

如何判断一个浮点数是否是规格化数?

为了使浮点数能尽量多地表示有效位数,一般要求运算结果用规格化数形式表示“规格化浮点数的尾数小数点后的第一位一定是个非零数。因此,对于原码编码的尾数来说,只要看尾数的第一位是否为1就行

2.8.7、浮点数如何进行舍入?

舍入方法选择的原则是:①尽量使误差范围对称,使得平均误差为0,即有舍有入,以防误差积累。②方法要简单,以加快速度。
IEEE754有4种舍入方式。
①就近舍入:舍入为最近可表示的数,若结果值正好落在两个可表示数的中间,则一般选择舍入结果为偶数。
②正向舍入:朝+∞方向舍入,即取右边的那个数
③负向舍入:朝-∞方向舍入,即取左边的那个数。
④截去:朝0方向舍入,即取绝对值较小的那个数

2.8.8、代计算机中是否要考虑原码加减运算?如何实现?

因为现代计算机中浮点数采用IEEE754标准,所以在进行两个浮点数的加减运算时,必须考虑原码的加减运算,因为IEEE754规定浮点数的尾数都用原码表示。
原码的加减运算可以有以下两种实现方式
1)转换为补码后,用补码加减法实现,结果再转换为原码。
2)直接用原码进行加减运算,符号和数值部分分开进行(具体过程见原码加减运算部分)。
 

相关文章:

  • 【服务部署】常用内网穿透方案
  • 【深度学习实验】图像处理(四):PIL——自定义图像数据增强操作(图像合成;图像融合(高斯掩码))
  • Xshell全局去除提示音
  • 阿里云ACE认证之国际版与国内版对比!
  • Java数据结构之《构造哈夫曼树》题目
  • 使用FFmpeg开发2-比特流过滤器
  • 解决浏览器缓存问题
  • bean依赖属性配置
  • [最优化理论] 梯度下降法 + 精确线搜索(单峰区间搜索 + 黄金分割)C++ 代码
  • 软件工程 - 第8章 面向对象建模 - 2 静态建模
  • 08_Collection集合2
  • 关于我离破500粉丝感受
  • Vue3中reactive和ref对比
  • 二叉树的基本操作实现包括创建二叉树、插入节点、搜索节点、删除节点、遍历二叉树等详解
  • Python安装步骤介绍
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • PAT A1092
  • Python实现BT种子转化为磁力链接【实战】
  • Spring Boot MyBatis配置多种数据库
  • Vue官网教程学习过程中值得记录的一些事情
  • vue中实现单选
  • Webpack 4x 之路 ( 四 )
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 近期前端发展计划
  • 思否第一天
  • 微信小程序:实现悬浮返回和分享按钮
  • 我的面试准备过程--容器(更新中)
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #android不同版本废弃api,新api。
  • #pragam once 和 #ifndef 预编译头
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (第二周)效能测试
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (规划)24届春招和25届暑假实习路线准备规划
  • (利用IDEA+Maven)定制属于自己的jar包
  • (转)jdk与jre的区别
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转载)OpenStack Hacker养成指南
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .gitattributes 文件
  • .NET Core 2.1路线图
  • .NET Core 版本不支持的问题
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .Net的DataSet直接与SQL2005交互
  • .NET简谈设计模式之(单件模式)
  • .Net中的设计模式——Factory Method模式
  • ??eclipse的安装配置问题!??
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @RequestBody与@ResponseBody的使用
  • [AIGC] SQL中的数据添加和操作:数据类型介绍
  • [BZOJ] 2044: 三维导弹拦截