计算思维:二进制串的校验

题目:待传输的二进制串为“1001111”,若采用偶校验,需增加几位校验位才能判断出哪一位传输错误,若传输过去变为“1011111”,则如何判断出是哪一位出错?请描述判断过程。

解答:①若不考虑校验位出错,因为二进制串为“1001111”,从数据位第一位到第七位依次编号为D1、D2、D3、D4、D5、D6、D7,数据位二进制编号依次为001、010、011、100、101、110、111,因为二进制编号最高只有3位,所以需要3个校验位,依次命名为P1、P2、P4,数据都设置为1。按照“偶校验规则”,此时Pn为编号的第n位为1的数据位相加之和,且相加后只看第一位。所以P1=D7+D5+D3+D1=1,P2=D7+D6+D3+D2=1,P4=D7+D6+D5+D4=0。 若传输过去变为“1011111”,则重新设置三个校验位P1’,P2’,P4’。P1’=D7+D5+D3+D1+P1=1,P2’=D7+D6+D3+D2+P2=0,P4’=D7+D6+D5+D4+P4=1。所以出错的数据位的二进制编号第一位为1,第二位为0,第三位为1,即D5数据位出错。 ②若考虑校验位出错,因为二进制串“1001111”一共有7位,按照顺序排列在数轴上,因为只有第n位为1的数据需要作为校验位,所以2^n次方位置空出,则空出4个位置,所以需要4个校验位,依次命名为P1、P2、P4、P8,数据位二进制编号依次为0001、0010、0011、0100、0101、0110、0111、1000、1001、1010、1011。按照“偶校验规则”,此时Pn为编号的第n位为1的数据位相加之和,且相加后只看第一位。所以P1=编号的第1位为1的位相加=D11+D9+D7+D5+D3=0,P2=编号的第2位为1的位相加=D11+D10+D7+D6+D3=0,P4=编号的第3位为1的位相加=D7+D6+D5=1,P8=编号的第4位为1的位相加=D11+D10+D9=1。 若传输过去变为“1011111”,保持校验码个数不变,重新设置4个校验码,命名为P1’、P2’、P4’、P8’,P1’=D11+D9+D7+D5+D3+P1=1,P2’=D11+D10+D7+D6+D3+P2=0,P4’=D7+D6+D5+P4=0,P8’=D11+D10+D9+P8=1。排列后得到数据位二进制编号为1001,即D9所对应的数据出错。 相比于第一种方法,我个人认为第二种方法更好,可以检测出校验码传输出错和数据传输出错。因为两位数字传输出错的概率比一位数字出错概率小很多,故这里不考虑。

C是一种多用途、高级编程语言。它最初由丹尼斯·里奇开发,并在1972年开始使用。C语言是一种结构化的编程语言,被广泛应用于系统软件的开发,如操作系统和编译器的编写。它也可以用于开发应用程序和游戏。 C语言具有简洁、高效、可移植和可移植性好的特点。它的语法规则简单直观,易学易懂。C语言支持模块化的程序设计,可以将程序划分为多个函数,提高代码重用性和可维护性。它还提供了丰富的基本数据类型和运算符,逻辑控制结构,如条件语句和循环语句,以及指针和数组等高级特性。 C语言的应用广泛。许多重要的计算机系统软件,如UNIX操作系统和Linux内核,都是用C语言编写的。C语言也是很多程序员入门的第一门编程语言,因为学习C语言可以培养良好的编程思维和习惯。此外,C语言还是其他编程语言的基础,如C++、Java和Python等。 虽然C语言很强大,但也存在一些不足之处。例如,C语言对于字符的处理相对复杂,没有直接支持的字符类型。此外,C语言的指针操作容易出错,对于初学者来说较为困难。 总的来说,C语言是一种重要的编程语言,具有广泛的应用领域和强大的功能。它不仅可以用于系统软件的开发,还可以用于各种应用程序和游戏的编写。C语言的学习和掌握对于想要成为一名优秀的程序员来说是必不可少的。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一二爱上蜜桃猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值