Autosar 系列教程:小柴带你学 AutoSar 总目录

# 小柴冲刺软考中级嵌入式系统设计师系列一、计算机系统基础知识(2)数据表示

二进制是计算机系统广泛采用的一种数制。在计算机内部,数值、文字、声音、图形图像等各种信息都必须经过数字化编码后才能被发送、存储和处理。

# 一、进位计数制及转换

进位制二进制八进制十进制十六进制
规则逢二进一逢八进一逢十进一逢十六进一
基数r=2r=8r=10r=16
数符0,10,1,2,3,4,<br />5,6,70,1,2,3,4,<br />5,6,7,8,90,1,2,3,4,<br />5,6,7,8,9,<br />A,B,C,D,E,F
2^i8^i10^i16^i
形式表示符BODH

将十进制转换为二进制

175.71875(10)= 2^7 + 2^5 + 2^3 + 2^2 + 2^1 + 2^0 +2^-1 + 2^-3 + 2^-4 +2^-5 = 10101111.10111(2)

这里举个例子:

假设要将十进制数 13 转换为二进制数:

13 ÷ 2 = 61
6 ÷ 2 = 30
3 ÷ 2 = 11
1 ÷ 2 = 01

将余数逆序排列得到:1101。因此,十进制数 13 转换为二进制数为 1101。

之前我一直不理解为什么要这样除 2。现在跟大家解惑一下

证明:

因为 13(10 进制)= 1101(二进制)

所以 13 ➗ 2 = 6 余 1 就可以看作为 1101 >> 1 余 1 (二进制 / 2 就是右移一位)

所以

十进制结果余数二进制结果余数
13 / 2611101>>11101
6/230110>>1110
3/21111>>111
1/2011>>101

所以倒推二进制计算结果,每次➗2 的余数都是在计算最低位的数值。

所以通过 10 进制 / 2 的余数即可转换为二进制。

同理:八进制是不是也一样呢。

这里就不展开了。

# 二、数值型数据的表示

# 1、原码、反码、补码和移码

数据在计算机中表示的形式成为机器数,采用二进制计数。

那为了便于计算呢就出现了原码、反码、补码和移码等不同的编码。

这里可以看我之前的文章有详细的原理介绍。

文章在这呢一篇文章彻底理解原码反码和补码

image-20240627083712258

# 2、定点数和浮点数

定点数:表示数据时小数点位置固定。

浮点数:小数点位置不固定。

浮点数一般表示为:
N = 2^E * F
E:阶码
F:尾数
 --------------------------
| 阶符 | 阶码 | 数符 |  尾数  |
 --------------------------

工业标准 IEEE 754

--------------------------
|  S  |  P  |       M      |
 --------------------------
 S:符号位【01负】
 P:指数(阶码)【用移,码表示】
 M:尾数【用原码表示】

# 3、其他数据表示

任何字符在计算机中都要转为二进制

  • 8421 码
  • ASCII 码
  • 汉字编码
  • Unicode

# 4、校验码

为了防止数据出错,在数据中添加校验码来检查数据正确性。

# ①奇偶校验码

在数据中添加一个 0/1 来使得数据中 1 的个数为奇数(奇校验)或者偶数(偶校验)。

十进制8421BCD 码带奇校验的 8421 码带偶校验的 8421 码
00 0 0 00 0 0 0 10 0 0 0 0

当然啦也存在三种:水平奇偶校验码 和 垂直奇偶校验码 以及 水平垂直奇偶校验码。

# ②海明码

n: 数据位、k: 校验位

2^k - 1 >= n + k

# 确定位置

假设有一个 8 位的数据那海明码的组成为 24-1>=8+4 (所以 k 为 4)(所在的位置为 2 (i-1) 即为 (1 2 4 8))

h12h11h10h9h8h7h6h5h4h3h2h1
D7D6D5D4P4D3D2D1P3D0P2P1

# 海明码的校验关系

海明码海明码下标校验位组说明(偶校验)
H1(P1)1P1P1 校验:P1,D0,D1,D3,D4,D6<br /> 即 P1=D0⊕D1⊕D3⊕D4⊕D6
H2(P2)2P2P2 校验:P2,D0,D2,D3,D5,D6<br /> 即 P2=D0⊕D2⊕D3⊕D5⊕D6
H3(D0)3=1+2P1,P2
H4(P3)4P3P3 校验:P3,D1,D2,D3,D7<br /> 即 P3=D1⊕D2⊕D3⊕D7
H5(D1)5=1+4P1,P3
H6(D2)6=2+4P2,P3
H7(D3)7=1+2+4P1,P2,P3
H8(P4)8P4P4 校验:P4,D4,D5,D6,D7<br /> 即 P4=D4⊕D5⊕D6⊕D7
H9(D4)9=1+8P1,P4
H10(D5)10=2+8P2,P4
H11(D6)11=1+2+8P1,P2,P4
H12(D7)12=4+8P3,P4

# 检测错误

G1=P1⊕D0⊕D1⊕D3⊕D4⊕D6
G2=P2⊕D0⊕D2⊕D3⊕D5⊕D6
G3=P3⊕D1⊕D2⊕D3⊕D7
G4=P4⊕D4⊕D5⊕D6⊕D7

若采用偶校验,则 G4G3G2G1 全为 0 时表示数据无错误(奇校验应全为 1)

若 G4G3G2G1 = 1010 则说明 H10 (D5) 出错了,将其取反即可纠正错误。

# ③循环冗余校验码

循环冗余校验码(Cyclic Redundancy Check, CRC)是一种用于检测数据传输或存储过程中错误的校验码。CRC 是一种基于多项式除法的算法,通过在数据传输前附加一个校验码来确保数据的完整性。以下是 CRC 的一些关键点:

基本原理:CRC 基于二进制多项式的数学运算。发送方在原始数据后附加一个校验码,使得附加数据(原始数据 + 校验码)可以被一个预定的生成多项式整除。在接收方,数据通过相同的生成多项式进行检查,如果余数为零,则说明数据没有错误。

生成多项式:这是一个预定的多项式,用于生成和校验 CRC 码。例如,CRC-32 使用的生成多项式是 x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1

计算步骤

  • 发送方
    • 将数据视为一个二进制多项式。
    • 将数据多项式左移(在其后附加零位),零位的数量等于生成多项式的度数。
    • 使用二进制除法将移位后的数据多项式除以生成多项式,得到余数。
    • 将余数附加到原始数据后,形成发送的数据帧。
  • 接收方
    • 接收数据帧,视为一个多项式。
    • 使用相同的生成多项式对接收的数据帧进行二进制除法,得到余数。
    • 如果余数为零,说明数据没有错误;否则,数据可能存在错误。

优势

  • 高效:CRC 算法计算速度快,适合硬件实现。
  • 检测能力强:能够检测出常见的传输错误,如单个比特错误、双比特错误、奇数个比特错误以及突发错误。

应用场景:CRC 广泛应用于数据通信、存储设备、网络协议等领域,如以太网、USB、HDLC 等协议中都使用了 CRC 来确保数据的完整性。

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

flechazo 微信支付

微信支付

flechazo 支付宝

支付宝

flechazo 贝宝

贝宝