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

【嵌入式系统设计师(软考中级)】第一章:计算机系统基础知识(上)

文章目录

    • 1. 数制及其转换
      • 1.1 常用数制
      • 1.2 不同数制间的转换方法(重点)
        • ①八进制Q→ 十进制D
        • ②十进制D → 八进制Q
    • 2. 数据的表示
      • 2.1 数值编码方式
        • ①原码
        • ②反码
        • ③补码
        • ④移码
      • 2.2 定点数与浮点数(重点)
        • ①定点数
        • ②浮点数
      • 2.3 非数值数据编码
      • 2.4 校验方法
        • ①奇偶校验(Parity Check)
        • ②海明校验(Hamming Code)
        • ③循环冗余校验(CRC, Cyclic Redundancy Check)
        • 三种校验方法对比

1. 数制及其转换

1.1 常用数制

现代计算机系统主要使用四种数制:二进制(Binary)、八进制(Octal)、十进制(Decimal)和十六进制(Hexadecimal)。理解它们之间的转换是计算机科学的基础。以下是各种数制的说明

数制十进制D二进制B八进制Q十六进制H
基本数码0,1,2,3…90, 10,1,2,3,4…70-9,A,B,C,D,E,F
基数r=10r=2r=8r=16
位权10n2n8n16n
形式表示符DBQ或OH

1.2 不同数制间的转换方法(重点)

在数制转换中,为了明确表示一个数值是基于哪种数制的,通常会在数值后加上形式表示符。以下是不同数制间的转换方法:

①八进制Q→ 十进制D
  • 给定数值 34 7 Q 347_Q 347Q

  • 方法:使用按权展开法,将每一位乘以其对应的权值(基数的幂次),然后求和。

  • 公式
    N D = d n × R n + d n − 1 × R n − 1 + ⋯ + d 0 × R 0 N_D = d_n \times R^n + d_{n-1} \times R^{n-1} + \dots + d_0 \times R^0 ND=dn×Rn+dn1×Rn1++d0×R0

  • 步骤

    • 34 7 Q 347_Q 347Q表示八进制数,权值从右到左依次是 8 0 , 8 1 , 8 2 8^0, 8^1, 8^2 80,81,82
    • 展开计算:
      34 7 Q = 3 × 8 2 + 4 × 8 1 + 7 × 8 0 = 3 × 64 + 4 × 8 + 7 × 1 = 192 + 32 + 7 = 23 1 D 347_Q = 3 \times 8^2 + 4 \times 8^1 + 7 \times 8^0 = 3 \times 64 + 4 \times 8 + 7 \times 1= 192 + 32 + 7 = 231_D 347Q=3×82+4×81+7×80=3×64+4×8+7×1=192+32+7=231D
  • 结果
    34 7 Q = 23 1 D 347_Q = 231_D 347Q=231D

②十进制D → 八进制Q
  • 给定数值 23 1 D 231_D 231D

  • 方法:使用短除法,不断将数值除以基数 R = 8 R=8 R=8,记录余数,直到商为 0。

  • 步骤

    • 23 1 D 231_D 231D 除以 8,记录商和余数,重复操作直到商为 0。
除数余数
82317
8284
833
  • 读取余数:从下往上读取余数,得到 34 7 Q 347_Q 347Q

  • 结果
    23 1 D = 34 7 Q 231_D = 347_Q 231D=347Q

2. 数据的表示

2.1 数值编码方式

在计算机系统中,数值通常以二进制形式存储和处理。为了表示有符号整数(包括正数、负数),引入了多种编码方式:原码、反码、补码和移码,每种编码方式都有其特点和适用场景:

①原码

定义与实例:原码是直接将数值转换为二进制,并在最高位使用0表示正数,1表示负数。例如,+5的8位二进制原码是00000101,而-5的8位二进制原码是10000101

存在的问题:考虑计算 1 + ( − 1 ) 1 + (-1) 1+(1),即 00000001 (1的原码) 加上 10000001 (-1的原码)。直接相加结果为 10000010,其原码表示的是-2而不是期待的0,这表明直接用原码进行加减运算会导致错误的结果。

②反码

引入原因与实例:反码解决了部分原码的问题,它通过取负数的二进制形式的每一位的反来表示。对于+5,它的8位二进制反码同样是00000101;对于-5,则是11111010(先变为10000101再取反)。

存在的问题:继续以 1 + ( − 1 ) 1 + (-1) 1+(1)为例,00000001 (1的反码) 加上 11111110 (-1的反码) 得到 00000000,但是还产生了额外的进位1,需要特殊处理这个进位。此外,反码存在+0-0两种表示方式,如0000000011111111,这增加了不必要的复杂性。

③补码

引入原因与实例:补码解决了反码中的问题,使得加减运算更加简便。正数的补码与原码相同,而负数的补码是在反码的基础上加1。例如,+5的8位二进制补码是00000101,-5则是11111011(反码11111010加1)。

优势与实例:再次考虑 1 + ( − 1 ) 1 + (-1) 1+(1)00000001 (1的补码) 加上 11111111 (-1的补码) 结果正好是00000000,没有产生多余的进位,且正确地得到了0。补码统一了零的表示,解决了正负零的问题,简化了硬件设计。

④移码

引入原因与实例:移码主要用于浮点数表示中的指数部分,通过给定一个偏置值(Bias),将数值映射到正值范围以便于比较。例如,在IEEE 754标准中,单精度浮点数的指数部分采用8位表示,偏置值为127。若实际指数为-1,则其移码表示为127 - 1 = 126,即01111110

应用示例:假设要比较两个浮点数的大小,由于指数部分已经通过移码转换成了无符号整数形式,可以直接根据其二进制表示判断大小,无需考虑正负号的影响。例如,指数值分别为01111110(代表-1)和10000000(代表1),显然,前者小于后者,便于排序和比较。

2.2 定点数与浮点数(重点)

①定点数

定义:定点数是一种数值表示法,其中小数点的位置是固定的。在计算机中,通常用固定数量的比特来表示整数部分和小数部分。例如,Q格式(如Q3.4)表示总共有8位,其中3位用于整数部分,4位用于小数部分,还有最高1位符号位(0表示正数,1表示负数)。

实例:将十进制数 5.75 转换为 Q3.4 格式的定点数

  • 步骤1:首先将 5.75 转换为二进制形式。

    • 整数部分 5 的二进制表示为 101
    • 小数部分 0.75 的二进制表示为 .11(因为 0.75 = 1 ⋅ 2 − 1 + 1 ⋅ 2 − 2 0.75 =1·2^{-1} + 1·2^{-2} 0.75=121+122)。
    • 因此,5.75 的二进制表示为 101.11
  • 步骤2:调整到 Q3.4 格式。

    • Q3.4 表示有3位整数部分和4位小数部分,总共7位(假设不考虑符号位)。
    • 扩展小数部分到4位:101.1100
  • 步骤3:考虑到符号位(这里我们处理正数),最终的Q3.4表示为:

    0 101.1100
    

    去掉小数点后写成:

    01011100
    

这意味着,在Q3.4格式下,5.75被表示为01011100(其中最左边的0是符号位,表示这是一个正数)。

问题:定点数的主要局限在于其动态范围有限且精度固定,不适合非常大或非常小的数值表示。

②浮点数

定义:浮点数是一种能够灵活表示很大范围数值的数据类型,它类似于科学计数法。IEEE 754标准定义了浮点数的标准格式,包括符号位、指数部分和尾数(也称作有效数字或小数部分)。单精度(32位)和双精度(64位)是最常见的两种浮点数格式。

实例:将十进制数 5.75 转换为 IEEE 754 单精度(32位)浮点数格式

  • 步骤1:将 5.75 转换为二进制形式,并规范化为科学记数法。

    • 5.75 的二进制表示为 101.11
    • 规范化为 1.0111 x 2^2
  • 步骤2:确定指数偏置值(Bias)。

    • 对于单精度浮点数,指数部分有8位,偏置值为127。
    • 实际指数为2,因此加上偏置值后的指数为 2 + 127 = 129,二进制表示为 10000001
  • 步骤3:确定尾数部分。

    • 在规范化形式中,尾数部分只存储小数点后面的数字,即 0111 后面补零至23位,得到 01110000000000000000000
  • 步骤4:结合符号位(这里是正数,所以符号位为0),最终的32位表示为:

     0        10000001         01110000000000000000000
    符号        指数                      尾数
    

小结

  • 定点数:适用于对精度要求高且数值范围不大的场景。例如,财务计算可能需要精确的小数位数控制。
  • 浮点数:适合需要覆盖广泛数值范围的应用,特别是对于科学计算、图形处理等涉及极大或极小数值的领域。然而,浮点数可能会牺牲一些精度以换取更大的表示范围。

2.3 非数值数据编码

编码类型具体标准/格式特点说明
字符编码ASCII7位编码,共128个字符,包含英文、数字及基本控制字符
字符编码Unicode统一字符集,涵盖全球文字符号,UTF-8是其变长编码实现(兼容ASCII)
汉字编码GB2312早期简体中文标准,收录6763个汉字,不支持生僻字
汉字编码GBKGB2312扩展版,支持21886个汉字,包含繁体及生僻字
汉字编码GB18030最新国家标准,覆盖70244个汉字,强制支持少数民族文字及生僻字
多媒体编码PCM(声音)原始音频采样格式,未压缩,保真度高(如CD音质)
多媒体编码MP3(声音)有损压缩格式,通过去除人耳不敏感频段减小文件大小
多媒体编码BMP(图像)无压缩位图格式,存储原始像素数据,文件体积大
多媒体编码JPEG(图像)有损压缩格式,支持高压缩比,适合照片类图像
多媒体编码PNG(图像)无损压缩格式,支持透明通道,适合图标和线条图形

2.4 校验方法

①奇偶校验(Parity Check)
  • 核心思想:通过增加1个校验位,使数据中1的个数为奇数(奇校验)或偶数(偶校验)。
  • 实现步骤:
    1. 发送方统计数据位中1的个数。
    2. 根据校验类型(奇/偶)决定校验位值:
      • 奇校验:1的总数+校验位=奇数
      • 偶校验:1的总数+校验位=偶数
    3. 接收方重新计算并验证1的个数是否符合约定。
②海明校验(Hamming Code)

海明校验是一种可以检测并纠正单个比特错误的校验方法,它的核心思想是通过多个校验位交叉覆盖数据位,形成一种"错误定位编码"。

想象你要保护一串数据(比如4位数据 1011),需要在其中插入几个"哨兵"(校验位)。这些哨兵的位置必须是2的幂次方(第1、2、4、8…位):

位置: 1   2   3   4   5   6   7
内容:P1  P2  D3  P4  D2  D1  D0

(P=校验位,D=数据位)

校验位计算方法
每个校验位负责"监视"特定位置的数据位:

  • P1(位置1):检查所有位置编号第0位为1的位(即1,3,5,7…)
  • P2(位置2):检查所有位置编号第1位为1的位(即2,3,6,7…)
  • P4(位置4):检查所有位置编号第2位为1的位(即4,5,6,7…)

计算方式:对负责的所有位做**异或(XOR)**运算,结果作为校验位值。

实例演示(4位数据 1011

  • 步骤1:插入校验位框架

    位置:1   2   3   4   5   6   7
    内容:_   _   1   _   0   1   1
    
  • 步骤2:计算各校验位

    • P1(管1,3,5,7):1⊕0⊕1 = 0
    • P2(管2,3,6,7):1⊕1⊕1 = 1
    • P4(管4,5,6,7):0⊕1⊕1 = 0
  • 最终编码:

    位置:1   2   3   4   5   6   7
    内容:0   1   1   0   0   1   1
    

关键点总结

  1. 校验位位置:必须放在2的幂次方位(1,2,4,8…)
  2. 覆盖规则:每个校验位监控特定组合的数据位
  3. 纠错能力:可100%纠正单比特错误,检测双比特错误
  4. 校验位数量:满足 2 r ≥ k + r + 1 2^r \geq k + r + 1 2rk+r+1 k k k=数据位数)
③循环冗余校验(CRC, Cyclic Redundancy Check)
  • 基本原理

    • 核心思想:将数据视为二进制多项式,通过模2除法生成校验码。
    • 关键参数:生成多项式(如CRC-16: x 16 + x 15 + x 2 + 1 x^{16} + x^{15} + x^2 + 1 x16+x15+x2+1)。
  • 计算步骤

    1. 在数据位后附加n0 n n n=生成多项式最高次幂)。
    2. 用生成多项式对扩展后的数据做模2除法。
    3. 余数作为CRC校验码附加到原始数据后。
  • 示例(简化版)
    数据:110101,生成多项式: x 3 + x + 1 x^3 + x + 1 x3+x+11011

    1. 附加3个0110101000
    2. 模2除法:
    	1101010001011--------110001011--------1110  ← 余数`110`
    
    1. 发送数据:110101 + 110
三种校验方法对比
特性奇偶校验海明校验CRC校验
检错能力单比特单/双比特多比特突发错误
纠错能力✅(单比特)
校验位开销1位 log ⁡ 2 ( k ) \log_2(k) log2(k)16/32位
计算复杂度极低中等较高
典型应用串口通信ECC内存网络数据包

应用场景建议

  • 简单通信:奇偶校验(如UART)
  • 关键存储:海明码(如RAM纠错)
  • 大数据传输:CRC(如TCP/IP协议栈)

相关文章:

  • linux命令八
  • SparkSQL Join的源码分析
  • python自动化浏览器标签页的切换
  • 大模型——Crawl4AI 中的数据提取策略
  • 【FPGA基础学习】DDS信号发生器设计
  • AI图片生成器
  • AIP-235 批量方法:Delete
  • idea如何使用git
  • Maybe:打造个人财务管理的开源操作系统
  • SpringBoot-基础特性
  • 前端vue3 实现倒计时功能 组件
  • 重返JAVA之路——图书管理系统
  • B2B2C多用户商城平台 的两种创新玩法
  • 华熙生物亮相消博会,这次又带来了什么样的变化?
  • springboot项目添加定时任务,用sftp推送zip包到目标服务器
  • 车载信息安全 --- 密钥管理
  • Anaconda笔记
  • C语言-习题整理(1)
  • 第 2 篇:快速上手 Framer Motion(实操入门)
  • 烽火ai场控接入deepseek自动回复话术软件
  • 我国成功发射试验二十七号卫星01星~06星
  • 女外交官杨扬出任中国驻圭亚那大使
  • 自然资源部一季度新批用海项目中,涉历史遗留围填海项目56个
  • 谁在地铁里阅读?——对话上海地铁上的读书人
  • 多米尼加俱乐部屋顶坍塌事故死亡人数升至232人
  • 4月沪市公司新增回购70家,金额上限已超222亿元