计算机组成原理 2 数据表示

机器数

        研究机器内的数据表示,目的在于组织数据,方便计算机硬件直接使用。

        需要考虑:

        支持的数据类型;

        能表示的数据精度;

        是否有利于软件的移植

        能表示的数据范围;

        存储和处理的代价;

        ...

  •         真值:符号用“+”、“-”表示的数据表示方法。
  •         机器数:符号数值化的数据表示方法, 用0、1表示符号。

        三种常见的机器数:(设定点数的形式为X_0X_1...X_n)         

         原码

  • 表示简单
  • 运算复杂:符号位不参加运算,要设置加法、减法器。
  • 0的表示不唯一
  • [X]原 + [Y]原 (不能直接判定是执行加法还是减法运算,分同号和异号)

        反码 

  •         表示相对原码复杂
  •         运算相对原码简单:符号位参加运算,只需要设置加法器,但符号位的进位位需要加到最低位。
  •         0的表示不唯一

        补码

  • 表示相对原码复杂
  • 0的表示唯一
  • 运算简单:只需设置加法器。
  • 补码中模的概念 (符号位进位后所在位的权值)

        移码(增码)

  • 移码表示浮点数的阶码,IEEE754中阶码用移码表示。
  • 具体实现:数值位与X的补码相同,符号位与补码相反。
  • 设定点整数X的移码形式为X_0X_1...X_n则移码的定义是: 2^n + X (X为真值,n为X的整数位位数) 

定点与浮点数据表示 

        定点数据表示

  •         可表示定点小数和整数
  •         表现形式:X_0.X_1X_2...X_n
  •         定点小数表示数的范围(补码为例): -1\le x \le 1-2^{-n}
  •         定点整数表示数的范围(补码为例):-2^n \le x \le 2^n-1
  •         定点数据表示数的不足:数据表示范围受限

        浮点数据表示 

        把数的范围和精度分别表示的一种数据表示方法。

        使用场合:当数的表示范围超出了定点数能表示的范围时。 

        一般格式

        E_s:E_1E_2...E_n M_s:M_1M_2...M_k\rightarrow N=2^e\cdot m

                E: 阶码位数,决定数据的范围

                M: 尾数位数,决定数的精度 

        例如,将x =2^{-01}\times(-0.1110)表示成机器形式。假定用8位表示该数,且阶码占3位,位数占5位(均包含一位符号位)。 

        答案是1 1 1 1 0 0 1 0

        一般表示格式的不足:不同系统可能根据自己的浮点数格式从中提取不同位数的阶码 

        IEEE 754格式        

        IEEE 754是一种定义了浮点数表示和运算标准的国际标准。该标准规定了浮点数的二进制表示、舍入规则、溢出处理等方面的细节,以确保在不同计算机系统之间实现浮点数的一致性。

        IEEE 754浮点数的表示形式分为单精度(32位)和双精度(64位)两种。

        IEEE 754浮点数的基本结构包括三个部分:符号位、指数部分和尾数部分

S8位偏指数E23位有效尾数M单精度
S11位偏指数E52位有效尾数M双精度

        IEEE754尾数形式为1.XXXXXX,其中M部分保存的是XXXXXX(1被隐藏),从而可保留更多的有效位,提高数据表示的精确度。

        与上述IEEE754格式相对应的32位浮点数的真值可表示为:

        N=(-1)^S\times2^{E-127}\times 1.M

        IEEE 754浮点数标准还规定了特殊值,如正无穷、负无穷、NaN(Not a Number)等,以及舍入规则、精度要求等细节:

        E=0 , M =0 :表示机器零;

        E=0 , M ≠0 :非规格化的浮点数;

        1≤ E ≤ 254 :规格化的浮点数;

        E=255 , M=0 :无穷大的数,对应于x / 0 (其中x≠0) ;

        E=255 , M≠0 :N=NaN,表示一个非数值,对应于0 / 0。 

IEEE754 32位浮点数与对应真值之间的变换流程 

        例如要将十进制数20.59375转换成32位IEEE754格式浮点数的二进制格式。

        解:

                先将十进制数换成二进制数: 20.59375=10100.10011

                移动小数点,使其变成1.M的形式 10100.10011=1.010010011×2 4

                得到: S=0, e = 4,E= 100+01111111 =10000011,M = 010010011

                最后得到32位浮点数的二进制存储格式为:

                0100 0001 1010 0100 1100 0000 0000 0000 = 41A4C000H 

 数据校验的基本原理

         必要性

                受元器件的质量、电路故障或噪音干扰等因素的影响,数据在被处理、传输、存储的过程中可能出现错误;

                若能设计硬件层面的错误检测机制,可以减少基于软件检错的代价。

        校验的基本原理 

                 增加冗余码(校验位)

        码距 

        同一编码中,任意两个合法编码之间不同二进数位数的最小值;

        0011与0001 的码距为1,一位错误时无法识别; 

        0000、0011、0101、0110、1001、1010、1100、1111等编码码距为2。任何一位发生改变,如0000变成1000就从有效编码变成了无效编码,容易检测到这种错误。

        校验码中增加冗余项的目的就是为了增大码距

        码距与检错、纠错能力的关系

  •         码距≥e+1:可检测e个错误
  •         码距≥2t+1:可纠正t个错误
  •         码距≥e+t+1:可纠正t个错误,同时检测e个错误(e ≥ t)

        码距越大,抗干扰能力越强,纠错能力越强,数据冗余越大, 编码效率低,编码电路也相对复杂;

        奇偶校验

                奇偶校验的基本原理

                1. 增加冗余码(校验位)

                2. 有效信息(k位) 校验信息(r=1位) 

                3. 编码:根据有效信息计算校验信息位,使校验码(数据+ 1位校验信息)中1的个数满足奇/偶校验的要求: (连续异或,偶数个1时结果为0)

                0001 ➡ 00011 (偶校验) P = D_1\oplus D_2 \oplus D_3 \oplus D_4 (校验码偶数个1

                0001 ➡ 00010 (奇校验) P = \overline{D_1\oplus D_2 \oplus D_3 \oplus D_4}校验码奇数个1

                4. 检错:

                        偶校验检错码: G=C\oplus X_1 \oplus X_2 \oplus X_3... \oplus X_n,G=0表示数据正常,否则表示出错。

                        奇校验检错码: G=\overline{C\oplus X_1 \oplus X_2 \oplus X_3... \oplus X_n},G=0表示数据正常,否则表示出错。

奇校验电路

        特点 

  •         编码与检错简单
  •         编码效率高
  •         不能检测偶数位错误, 无错结论不可靠,是一种错误检测码
  •         不能定位错误,因此不具备纠错能力
  •         奇/偶校验码距为 2,如11000011 ➡ 01000010
  •         一般在同步传输方式中常采用奇校验,异步传输方式中常采用偶校验

        改进的奇/偶校验

  •         双向奇偶校验
  •         方块校验
  •         垂直水平校验

CRC校验

        CRC(Cyclic Redundancy Check)校验是一种在数据通信中常用的差错检测技术。它通过对数据进行多项式运算,生成一定长度的冗余校验码,将该校验码附加到原始数据中发送。接收方在收到数据后,进行相同的多项式运算,然后将计算出的校验码与接收到的校验码进行比较,从而检测数据是否在传输过程中发生了错误。

        收发双方约定的一个(r + 1)位二进制数,发送方利用G(X)对信息多项式做模2除运算,生成校验 码。接收方利用G(X)对收到的编码多项式做模2除运算检测差错及错误定位。

        G(x)应满足的条件:

  •         最高位和最低位必须为1;
  •         被传送信息(CRC码)任何一位发生错误时,被生成多项式做除后应该使余数不为0; 
  •         不同位发生错误时,模2除运算后余数不同;
  •         对不为0余数继续进行模2除运算应使余数循环。 

CRC校验的主要特点包括:

  1. 多项式生成器: CRC校验使用一个预定义的生成多项式,通常用二进制表示。该多项式决定了CRC校验码的生成规则。

  2. 除法运算: 数据发送方和接收方都执行CRC多项式除法运算。发送方用生成多项式除以数据,并将余数(CRC校验码)附加到数据末尾。接收方执行相同的除法运算,如果余数为零,说明数据没有错误;否则,说明数据可能存在错误。

  3. 固定长度的校验码: CRC校验生成的校验码长度是固定的,通常在16位、32位等。这种特性有助于在接收端检测到传输过程中可能发生的错误。

  4. CRC不能纠正错误,但它可以有效地检测出大多数传输错误。

        常见生成多项式G(x)

        模2运算规则        

        a) 加/减运算:异或运算,加不进位,减不借位

                        0±0=0,0±1=1,1±0=1,1±1=0

        b) 模2除法:按模2减,求部分余数,不借位。

        c)上商原则:

        ①部分余数首位为1时,商为1,减除数;

        ②部分余数首位为0时,商为0,减0;

        ③当部分余数的位数小于除数的位数时,该余数即为最后余数。

        编码步骤

        (1)根据待校验信息的长度k,按照 k+r ≤ 2r-1 确定校验位r的位数

                如对4位信息 1100 进行CRC编码,根据 4 + r \le 2^r - 1

                得 r_{min}=3

        (2)根据r 和生成多项式的选择原则,选择位数为 r +1 的生成多项式G(X)= 1011

        (3)进行下列变化:将待校验的二进制信息Q(X)逻辑左移 r 位,得到Q(X)’

                        有效信息(k位) 校验信息(r位)  ➡ 1100 000

        (4)对Q(X)’按模2运算法则除G(x),求CRC编码中的r位校验信息 

        (5)用得到的余数替换Q(X)’的最后r位即可得到对应的CRC编码:

1100 000➡1100 010

CRC的检错与纠错 

        接收方利用G(X)对收到的编码多项式做模2除运算,余数为0说明传输没有错误;余数不为0说明传输有错。

        例如(7,4)编码不同数位出错对应的余数:

G(x)=1011

        若余数不为0,一边对余数补0继续做模2除,同时让被检测的校验码循环左移,当余数为101时, 出错位也移到A1位置。通过异运算纠正后继续循环左移和执行余数模2除法,直到修改后的出 错位回原位。

海明校验

        海明检验基于海明码(Hamming Code),一种特殊的错误检测和纠正码,通过添加额外的校验位来实现。

        海明码中的每个数据块包含了原始数据位(数据)和额外的校验位(校验码)。这些校验位的位置由数据位的位置决定,以一种特定的规则进行排列。通过这种方式,当数据传输时,接收方可以使用这些校验位来检测并纠正传输过程中可能发生的错误。

海明检验的基本原理:

  1. 生成海明码: 在发送数据之前,计算数据的海明码。海明码中的每个校验位都是根据特定规则与数据位相关联的。

  2. 传输数据: 将原始数据和生成的海明码一起传输。

  3. 接收数据: 接收方收到数据后,使用相同的海明码规则计算接收到的数据的海明码。

  4. 校验: 接收方比较接收到的校验位与计算出的校验位。如果它们不匹配,则表示数据在传输过程中发生了错误。

        如果海明检验检测到错误,接收方可以尝试使用海明码中的校验位来确定错误的位置,并尝试纠正错误。这种方式可以有效地提高数据传输的可靠性,特别是在受到噪声干扰或传输信道不稳定的情况下。

        具体步骤

        增加冗余码(校验位)

  •         有效信息(k位) 校验信息(r位)
  •         设k+r位海明码从左到右依次为第1,2,3,…..., k+r位
  •         r位校验位记为P_i(i=1,2,…,r),分别位于k+r位海明编码的第2^{i-1}(i=1,2,…,r) 位上,其余位依次放置被校验的数据位;

(7,4)海明校验码中校验位和被校验信息位的排列如下:

海明码位号 Hj1234567891011
P和b的分布P1P2b1P3b2b3b4P4b5b6b7
  •         Hj位的数据被编号小于j的若干个海明位号之和等于j的校验位所校验 ,如 

                由此可采用偶校验计算出P1~P4 四个校验位的值 

                P_1 = b_1\oplus b_2\oplus b_4\oplus b_5\oplus b_7

                P_2 = b_1\oplus b_3\oplus b_4\oplus b_6\oplus b_7

                P_3 = b_2\oplus b_3\oplus b_4

                P_4 = b_5\oplus b_6\oplus b_7

  •         设置指错字G4G3G2G1

                G_4G_3G_2G_1为0则表明无错误,反之指出出错位的海明码位号。

                如G_4G_3G_2G_1 = 1 0 1 1, 表明H_{11}位出错! 当只有一位出错时,由于指错字G_4G_3G_2G_1能定位错误,故可利用指错字配合适当电路和异或门,修正出错位。 

 

 

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

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

相关文章

Kotlin基本语法1到函数

1.range表达式 fun main() {var age 12.3if (age in 0.0..3.3){println("婴幼儿")}else if (age in 4.0..12.2){println("少儿")}else{println("未知")}/*** in 后面还可以接 list set 都可以*/if (age !in 0.0..3.3){println("婴幼儿&quo…

如何使用idea连通服务器上的Redis(详细版本)

这里我使用的是阿里云的服务器 打开阿里云的安全组,设置端口为6379 在redis.conf文件中,注释bind 127.0.0.1 将protected-mode设置为no,即关闭保护模式 更改服务器中的防火墙,放行6379端口 # 放行端口 firewall-cmd --zo…

Java+SpringBoot构建智能捐赠管理平台

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

七天入门大模型 :提示词工程 Prompt Engineering,最全的总结来了!

文章目录 技术交流群用通俗易懂方式讲解系列引 言LLM 的超参配置Prompt Engineering指令主要内容少样本学习更加明确的提示善用分隔符思维链提示对输出格式的明确要求 最佳实践案例1. Agent场景:使用prompt实现agent create2. Agent场景:使用system mess…

AIGC | AI提示词构建

文章目录 📚BARD提示词构建法🐇前言🐇第一步:阐述背景Background🐇第二步:定义目标Aim🐇第三步:设定角色Role🐇第四步:设置要求Demand 📚测试与迭…

黑马程序员微信小程序学习总结7.工具脚本、自定义组件、data和properties的区别

目录 工具脚本(utils中的wxs)自定义组件组件的引用方式局部引用全局引用组件和页面的区别组件样式隔离data数据组件method事件处理函数自定义组件添加属性 data和properties的区别使用setData修改properties的值 工具脚本(utils中的wxs&#…

[缓存] - 1.缓存共性问题

1. 缓存的作用 为什么需要缓存呢?缓存主要解决两个问题,一个是提高应用程序的性能,降低请求响应的延时;一个是提高应用程序的并发性。 1.1 高并发 一般来说, 如果 10Wqps,或者20Wqps ,可使用分布…

Linux命令行全景指南:从入门到实践,掌握命令行的力量

目录 知识梳理思维导图: linux命令入门 为什么要学Linux命令 什么是终端 什么是命令 关于Linux命令的语法 tab键补全 关于命令提示符 特殊目录 常见重要目录 /opt /home /root /etc /var/log/ man命令 shutdown命令 history命令 which命令 bash…

【Python网络编程之Ping命令的实现】

🚀 作者 :“码上有前” 🚀 文章简介 :Python开发技术 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 Python网络编程之Ping命令的实现 代码见资源,效果图如下一、实验要求二、协议原理2…

P1990 覆盖墙壁题解

题目 有一个长为N宽为2的墙壁,给你两种砖头:一个长2宽1,另一个是L型覆盖3个单元的砖头。如下图: 0 0 0 00砖头可以旋转,两种砖头可以无限制提供。你的任务是计算用这两种来覆盖N2的墙壁的覆盖方法。例如一个23的墙…

petalinux2018.3安装步骤

1、虚拟机安装ubuntu-16.04.7-desktop-amd64.iso (注意:安装ubuntu-18.04.6-desktop-amd64.iso和ubuntu-16.04.6-desktop-i386.iso会报以下错误) environment: line 314: ((: 10 #15~1 > 10 #3: syntax error in expression (error toke…

幻兽帕鲁Palworld服务器设置参数(汉化)

创建幻兽帕鲁服务器配置参数说明,Palworld服务器配置参数与解释,阿腾云atengyun.com分享: 自建幻兽帕鲁服务器教程: 阿里云教程 https://t.aliyun.com/U/bLynLC腾讯云教程 https://curl.qcloud.com/oRMoSucP 幻兽帕鲁服务器 幻…

Mysql中关于on,in,as,where的区别

目录 Mysql on,in,as,where的区别 Mysql语句问题解决 1、left join数据筛选问题 2、相同数据重复筛选使用问题 3、根据某个字段排序取每个类别最后三条数据或前三条数据 4、业务逻辑书写位置问题 5、查找另一表内和本表相关字段的数量 6、关于union的使用 7、limit的巧…

2019年通信工程师初级 实务 真题

文章目录 一、第9章 通信动力与环境通信电源系统的主要功能:“供”、“配”、“储”、“发”、“变” 二、第2章 传输网三、第3章 接入网四、第4章 互联网 一、第9章 通信动力与环境 【问题一】 网络通信设备对动力与环境的质量要求可以归纳为 (1&#…

剑指offer——二进制中1的个数

目录 1. 题目描述2. 可能引起死循环的想法3. 改进后的代码4. 给面试官惊喜的代码 1. 题目描述 请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制位1001,有2位是1,因此如果输入9,该函数输…

今天:旧时是这样“破五迎福”

昨(正月初四)天,笔者——“ 人民体验官 ”, 为了推广人民日报官方微博文化产品所发表在10余个网站自媒体平台上的文章《今天:大年初四迎灶神爷》,不知何故被笔者寄居养老城市的自媒体论坛反复拒之门外&…

猫头虎分享已解决Bug || ImportError: cannot import name ‘relu‘ from ‘keras.layers‘

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

MATLAB知识点:fibonacci函数(★☆☆☆☆)返回斐波那契数列

​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 节选自第3章:课后习题讲解中拓展的函数 在讲解第…

【刷题记录】——2024寒假day9编程题

本系列博客为个人刷题思路分享&#xff0c;有需要借鉴即可。 1.目录大纲&#xff1a; 2.题目链接&#xff1a; T1:LINK T2:LINK 3.详解思路&#xff1a; T1: 思路&#xff1a; /*** Note: The returned array must be malloced, assume caller calls free().*/#include<…

数据卷的常见命令,如何创建Nginx容器,修改nginx容器内的html目录下的index.html文件

数据卷 什么是数据卷 数据卷&#xff08;volume&#xff09;是一个虚拟目录&#xff0c;是容器内目录与宿主机**目录**之间映射的桥梁。 以Nginx为例&#xff0c;我们知道Nginx中有两个关键的目录&#xff1a; html&#xff1a;放置一些静态资源 conf&#xff1a;放置配置文…