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

news2024/11/28 0:58:33

机器数

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

        需要考虑:

        支持的数据类型;

        能表示的数据精度;

        是否有利于软件的移植

        能表示的数据范围;

        存储和处理的代价;

        ...

  •         真值:符号用“+”、“-”表示的数据表示方法。
  •         机器数:符号数值化的数据表示方法, 用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能定位错误,故可利用指错字配合适当电路和异或门,修正出错位。 

 

 

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

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

相关文章

ELAdmin 配置定时任务

定义方法 在自己的 Module 中写个要执行的方法。 比如获取微信公众号的 accessToken,每两个小时更新一次。这种的其实使用 Spring 的 Scheduled 更方便些,此处仅为演示。 package me.zhengjie.mp.task;import com.alibaba.fastjson.JSON; import lombo…

基于Linux的nfs、samba网络服务搭建

我学的Ubuntu&#xff0c;以它为例子 一、nfs(linux <---> linux) 1.1.nfs首先搭建服务端&#xff08;对外共享&#xff09; //安装nfs核心服务 sudo apt update sudo apt install nfs-kernel-server //配置nfs文件(指定共享文件) sudo vim /etc/exports //重启nf…

H5 渐变3D旋转个人主页引导页源码

H5 渐变3D旋转个人主页引导页源码 源码介绍&#xff1a;一款渐变3D旋转个人主页引导页源码&#xff0c;可以做个人主页/旗下网站引导 下载地址&#xff1a; https://www.changyouzuhao.cn/10392.html

第三百四十五回

文章目录 1. 概念介绍2. 方法与功能2.1 基本用法2.2 加密算法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"FlutterCacheManager组件"相关的内容&#xff0c;本章回中将介绍一个加密工具包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 加密主要…

【MySQL进阶之路】通过实操理解 explain 执行计划

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

【刷题记录】——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<…

计算机网络——11EMail

EMail 电子邮件&#xff08;EMail&#xff09; 3个主要组成部分 用户代理邮件服务器简单邮件传输协议&#xff1a;SMTP 用户代理 又名“邮件阅读器”撰写、编辑和阅读邮件输入和输出邮件保存在服务器上 邮件服务器 邮箱中管理和维护发送给用户的邮件输出报文队列保持待发…

【成长记录】第一次写博客入csdn榜单了 还是第一.....

庆祝一下第一次拿综合榜榜一 Java内容榜第二 总之谢谢大家支持 小苏会继续努力的 可以看看我的新作 嘻嘻&#x1f601;&#x1f924;&#x1f449;&#x1f3fb;&#x1f448;&#x1f3fb; 谢谢大家

web3知识体系汇总

web3.0知识体系 1.行业发展 2. web3的特点&#xff1a; 1、统一身份认证系统 2、数据确权与授权 3、隐私保护与抗审查 4、去中心化运行 Web3.0思维技术思维✖金融思维✖社群思维✖产业思维”&#xff0c;才能从容理解未来Web3.0时代的大趋势。 3.技术栈 Web3.jsSolidit…

Spring Boot 笔记 005 环境搭建

1.1 创建数据库和表&#xff08;略&#xff09; 2.1 创建Maven工程 2.2 补齐resource文件夹和application.yml文件 2.3 porn.xml中引入web,mybatis,mysql等依赖 2.3.1 引入springboot parent 2.3.2 删除junit 依赖--不能删&#xff0c;删了会报错 2.3.3 引入spring web依赖…

2.14数据结构与算法学习日记

洛谷P1934 封印 题目背景 很久以前&#xff0c;魔界大旱&#xff0c;水井全部干涸&#xff0c;温度也越来越高。为了拯救居民&#xff0c;夜叉族国王龙溟希望能打破神魔之井&#xff0c;进入人界“窃取”水灵珠&#xff0c;以修复大地水脉。可是六界之间皆有封印&#xff0c;…

洛谷_P1059 [NOIP2006 普及组] 明明的随机数_python写法

这道题的关键在于去重和排序&#xff0c;去重可以联想到集合&#xff0c;那排序直接使用sort方法。 n int(input()) data set(map(int,input().split( ))) data list(data) data.sort() print(len(data)) for i in data:print(i,end )

Python编程之旅:从入门到精通

在数字世界的无尽宇宙中&#xff0c;Python无疑是一颗璀璨的明星。其简洁易懂的语法、丰富的库和广泛的应用领域&#xff0c;使得Python成为了众多初学者的首选编程语言。那么&#xff0c;如何学习Python呢&#xff1f;本文将带你一步步踏上Python编程的旅程。 一、入门篇&…

1.Electron初始与安装

这里写目录标题 一、前言二、下载三、简要总结 一、前言 原文以及该系列后续文章请参考&#xff1a;安装Electron 随着前端的不断强盛&#xff0c;现在的前端已经不再满足于网页开发了&#xff0c;而是在尝试能否使用前端的开发逻辑来开发PC端的桌面软件。 即用html、js、css…

软件价值12-射箭游戏

射箭游戏&#xff0c;按空格键发射&#xff0c;打击移动靶&#xff0c;左上角显示成绩状态。 代码&#xff1a; import pygame import sys import random# 初始化Pygame pygame.init()# 设置窗口大小 SCREEN_WIDTH 800 SCREEN_HEIGHT 600 screen pygame.display.set_mode((…

leetcode:55.跳跃游戏

1.解题思路&#xff1a;贪心算法看最大覆盖范围 2.模拟过程&#xff1a; 1.若数组长度等于1&#xff0c;直接返回True 2.循环遍历覆盖范围&#xff0c;选取最大的覆盖范围&#xff1b;若覆盖范围覆盖到了最后一个元素&#xff0c;直接返回true. 3.代码&#xff1a;(贪心无套…

蓝牙BLE学习-蓝牙广播

1.概念 什么叫做广播&#xff0c;顾名思义就像广场上的大喇叭一样&#xff0c;不停的向外传输着信号。不同的是&#xff0c;大喇叭传输的是音频信号&#xff0c;而蓝牙传输的是射频信号。 BLE使用的是无线电波传递信息&#xff0c;就是将数据编码&#xff0c;调制到射频信号中发…

Node.js开发-HTTP协议

HTTP协议 1) 概念2) 请求报文的组成3) HTTP 的请求行4) HTTP 请求头5) HTTP 的请求体6) 响应报文的组成7) 创建 HTTP 服务8) 获取 HTTP请求报文9) 设置 HTTP 响应报文10) 设置资源类型&#xff08;mime类型&#xff09;11) GET和POST请求的区别 1) 概念 HTTP&#xff08;hyper…

php数组与字符串函数

php数组与字符串函数 1. php数组2. 字符串函数 1. php数组 在php中&#xff0c;有三种类型的数组&#xff1a; 数值数组 - 带有数字ID键的数组关联数组 - 带有指定的键的数组&#xff0c;每个键关联一个值多维数组 - 包含一个或多个数组的数组 2. 字符串函数 在PHP中&#xf…

LeetCode:70.爬楼梯

前言&#xff1a;好家伙&#xff0c;一直以为动态规划是啥高大上的&#xff0c;解释那么多&#xff0c;在我看来不过是找规律罢了&#xff0c; 写那么多"专业术语"咋看咋像糊弄人的 (手动扶额) 另外&#xff0c;通项公式虽然抽象还能接受&#xff0c;但是矩阵快速幂…