? 作者简介,愚公搬代码 ?《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。 ?《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。
?《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
??欢迎 ?点赞?评论?收藏
计算机中的校验码(Check Code 或 Error-Detecting Code)是用于检测数据在存储或传输过程中是否发生错误的一种机制。校验码通过在数据中添加额外的信息来实现,这些信息可以在数据接收端被用来检查数据是否完整、正确。校验码的使用非常广泛,包括内存校验、网络通信、数据存储等多个领域。
奇偶校验是计算机通信和数据存储中常用的一种简单校验码方法,用于检测数据在传输或存储过程中是否发生了错误。奇偶校验通过添加一个额外的位,即奇偶校验位,来确保数据位(包括校验位自身)中“1”的总数是奇数(奇校验)或偶数(偶校验)。这种方法可以检测出任意奇数位的错误,但不能检测出偶数位的错误,也无法定位错误发生的具体位置。
工作原理
例子
假设我们要传输数据1011
,我们使用奇校验和偶校验来计算校验位:
1011
中有三个"1",是奇数。1
。10111
。1011
中有三个"1",已经是奇数。0
。10110
。优缺点
奇偶校验广泛用于早期的计算机系统和一些现代的低级通信协议中,尽管它的错误检测能力有限,但由于其实现的简单性,仍然在特定场景下有其应用价值。
1、给出编码1001101的奇校验码和偶校验码( )。
A 10011011, 10011010
B 10011011, 10011011
C 10011010, 10011010
D 10011010, 10011010
解析:
为了给出编码1001101
的奇校验码和偶校验码,我们首先需要计算原始编码中"1"的数量。
原始编码:1001101
奇校验码
10011011
偶校验码
10011010
因此,给出编码1001101
的奇校验码是10011011
,偶校验码是10011010
。
选项A正确:10011011
(奇校验码),10011010
(偶校验码)。
模2除法是一种在计算机科学中用于生成循环冗余校验(CRC)码的算术运算方法。它与传统的长除法运算类似,但在模2除法中,不执行进位和借位操作。这种方法广泛应用于通信和存储系统中,用于检测数据传输或存储过程中的错误。
模2除法的操作规则:
使用模2除法生成CRC的过程:
模2加法是指对于两个二进制数的对应位进行相加,结果取模2。也就是说,如果两位都是0或者都是1,结果就是0,如果两位一个是0一个是1,结果就是1。
0+0=0 ? 0+1=1 ?1+0=1 ? 1+1=0
例如:0101 + 0011 = 0110,列竖式计算:
0 1 0 1
+ 0 0 1 1
—————————————
0 1 1 0
模2减法是指在模2的情况下进行减法运算。在模2的情况下,只有两个可能的值:0和1。因此,模2减法的规则如下:
0-0=0 ? 0-1=1 ? 1-0=1 ? 1-1=0
例如:0110-0011=0101,列竖式计算:
0 1 1 0
- 0 0 1 1
—————————————
0 1 0 1
模2乘法指的是将两个数相乘后取模2的结果。换句话说,模2乘法就是判断两个数的乘积是奇数还是偶数。
在模2乘法中,如果两个数中有一个数是偶数,那么乘积一定是偶数;如果两个数都是奇数,那么乘积是奇数。
0×0=0 ? 0×1=0 ? 1×0=0 ? 1×1=1
多位二进制模2乘法类似于普通意义上的多位二进制乘法
不同之处在于后者累加中间结果(或称部分积)时采用带进位的加法
模2乘法对中间结果的处理方式采用的是模2加法
例如1011 × 101=100111,列竖式计算:
1 0 1 1
× 1 0 1
———————————————————
1 0 1 1
0 0 0 0
+ 1 0 1 1
———————————————————
1 0 0 1 1 1
————————————————
模2除法是模2乘法的逆运算。模2除法具有下列三个性质:
1、当最后余数的位数小于除数位数时,除法停止。
2、当被除数的位数小于除数位数时,则商数为0,被除数就是余数。
3、只要被除数或部分余数的位数与除数一样多,且最高位为1,不管其他位是什么数,皆可商1。
循环冗余校验(CRC)是一种常见的检测数据传输或存储过程中错误的方法,广泛用于通信系统、网络协议和数据存储验证。CRC通过对数据块应用模2除法,并使用特定的生成多项式来生成一个短的、固定长度的校验码(即CRC码),随数据一起发送或存储。接收方或读取方再次计算数据的CRC码,并与传送或存储的CRC码进行比较,以此来检测数据是否完整、无误。
CRC的工作原理
G(x)
。生成多项式是CRC算法的核心,不同的应用可能选择不同的生成多项式。为什么CRC有效
CRC之所以能有效检测错误,是因为它基于多项式运算。这种方法能够检测到的错误类型包括:
常见的生成多项式
0x04C11DB7
。0x1021
。注意点
尽管CRC非常有效地检测了大部分错误,但它不是绝对完美的。理论上存在极少数情况,错误数据的CRC码可能与原始数据的CRC码相同,导致错误无法被检测到。然而,在实际应用中,这种概率非常小,因此CRC仍然是一种非常可靠的错误检测方法。
1、待发送的信息为101001,生成多项式为G(x)=x^3 + x^2 + 1,计算编码后的信息。
解析:
为了计算给定信息101001
使用生成多项式G(x) = x^3 + x^2 + 1
编码后的信息,我们将遵循CRC的生成过程。这个过程包括将信息表示为多项式、附加额外的零以匹配生成多项式的阶数、执行模2除法,最后将得到的余数(CRC码)附加到原始信息上。
步骤1: 表示信息和生成多项式
101001
可表示为 x^5 + x^3 + 1
。G(x) = x^3 + x^2 + 1
,表示为1101
。步骤2: 附加额外的零
生成多项式G(x)
是3阶的,所以我们需要在信息末尾附加3个零,准备进行模2除法。原始信息101001
变为101001000
。
步骤3: 执行模2除法
使用1101
(生成多项式)对101001000
执行模2除法,得到余数。这一步类似于长除法,但是减法被替换为异或操作(模2加法)。
过程如下:
101001000
--------
1101 | 101001000
1101
----
1110
1101
----
1110
1101
----
1100
1101
----
001
最终余数为001
。
步骤4: 附加余数到原始信息
将得到的余数(001
)附加到原始信息(不包含一开始附加的零)101001
上,得到最终的编码后信息为101001001
。
2、接收到的信息为101101001,生成多项式为G(x)=x^3 + x^2 + 1,判断传输是否有误码。
解析:
为了判断接收到的信息101101001
是否有误码,我们可以使用生成多项式G(x) = x^3 + x^2 + 1
进行校验。这个过程涉及将接收到的信息作为被除数,生成多项式作为除数执行模2除法。如果最终的余数为0,那么可以认为传输过程中没有误码;如果余数不为0,则表示传输过程中有误码。
步骤1: 表示信息和生成多项式
101101001
。G(x) = x^3 + x^2 + 1
,对应的二进制表示为1101
。步骤2: 执行模2除法
使用生成多项式1101
对接收到的信息101101001
进行模2除法。这里,不需要附加额外的零,因为我们是在校验阶段而不是在生成CRC码的阶段。
过程如下:
101101001
--------
1101 | 101101001
1101
----
1100
1101
----
1100
1101
----
11
因为不是0所以有误码
3、在( )校验方法中,采用模2运算来构造校验位。(2019上半年试题)
A.水平奇偶
B.垂直奇偶
C.海明码
D.循环冗余
解析:
A. 水平奇偶校验 和 B. 垂直奇偶校验:这两种奇偶校验方法通常用于简单的错误检测,特别是在通信或数据存储中。它们通过添加一个校验位来确保一组数据位中"1"的总数为奇数(奇校验)或偶数(偶校验)。虽然它们的实现可能涉及二进制运算,但并不特指使用模2运算来构造校验位。
C. 汉明码:汉明码是一种线性纠错码,能够不仅检测错误还能纠正错误,特别是单一位错误。它通过在数据位中插入多个校验位来实现,这些校验位是基于特定数据位的组合计算出来的,以确保每组位(包括数据位和校验位)中1的数量符合奇偶性要求。虽然汉明码的计算涉及二进制操作,但它的核心不是模2运算。
D. 循环冗余(CRC):CRC是通过将数据视为一个大的多项式,并使用特定的生成多项式进行模2除法来生成校验位的方法。这种方法的核心正是模2运算,它在整个计算过程中使用异或操作来模拟除法和减法,最终生成的余数作为CRC校验码。CRC因其高效的错误检测能力而广泛应用于数据传输和存储系统中。
因此,正确答案是 D. 循环冗余。
汉明校验(Hamming Code)是一种错误检测和纠正的编码方法,由理查德·汉明(Richard Hamming)在20世纪50年代发明。汉明码不仅能发现单一位错误,还能自动纠正这类错误,使其在计算机内存、数据传输和其他需要高可靠性的系统中得到广泛应用。
工作原理
汉明码通过在数据位之间插入多个校验位(parity bits)来实现错误检测和纠正。校验位的位置通常是2的幂次方上(即第1、2、4、8位等),其值根据特定的数据位计算得出,以确保某个特定组合的位(包括数据位和校验位)中1的数量为偶数(偶校验)或奇数(奇校验),这取决于使用的是偶校验法还是奇校验法。
校验位的计算
k
位,需要添加r
个校验位,那么必须满足条件:$(2^r \geq k + r + 1)$ 。错误检测与纠正
接收端在收到数据后,重新计算每个校验位,并比较这些校验位与接收到的校验位。如果所有校验位都匹配,则假定没有错误发生。如果某些校验位不匹配,其不匹配的校验位的位置编号之和指示出了错误位的准确位置。这样,接收端可以直接翻转该位以纠正错误。
优缺点
汉明码因其能够自动纠正错误而被广泛应用于计算机内存、数据传输等领域,特别是在对数据完整性要求较高的系统中。尽管它不适用于错误率非常高的环境,但在许多应用场景中仍然是一种有效的错误控制方法。
原始数据0110,n = 4
根据海明校验码公式可以得到需要添加的校验码位数k = 3
校验码放置的位置应为2的整数次幂,即Pi=2^i
于是我们得到了这样一个待计算的海明码:
其中,P0、P1、P2为三个我们添加的校验码
接下来我们为每一个数据添加校验组,校验组是什么意思呢,就是这一下标对应的数据可以由一个校验组来唯一对应检验。通俗地讲,做法就是将每一个数据位的下标分解成校验码所在下标的和,(校验位不分解),拿我们的例子来看看:
计算海明校验码的最后一个步骤就是得出P0、P2、P3的具体值,其做法为:
计算Pi的值,就在校验组中将与Pi有关的那几组数据做 异或(相同为0,不同为1) 运算拿我们的例子来看看:
计算结束后,和原来的数据组合我们就得到了海明校验码:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。