❶ 汉明码三位校验位最小距离为3的编码如何判断是错了一位还是两位啊谢谢
最常用的差错控制方法有奇偶校验法、循环冗余校验法和汉明码等。这些方法用于识别数据是否发生传输错误,并且可以启动校正措施,或者舍弃传输发生错误的数据,要求重新传输有错误的数据块。1.奇偶校验法奇偶校验法是一种很简单并且广泛使用的校验方法。这种方法是在每一字节中加上一个奇偶校验位,并被传输,即每个字节发送九位数据。数据传输以前通常会确定是奇校验还是偶校验,以保证发送端和接收端采用相同的校验方法进行数据校验。如果校验位不符,则认为传输出错。奇校验是在每个字节后增加一个附加位,使得“1”的总数为奇数。奇校验时,校验位按如下规则设定:如果每字节的数据位中“1”的个数为奇数,则校验位为“0”若为偶数,则校验位为“1”。奇校验通常用于同步传输。而偶校验是在每个字节后增加一个附加位,使得“1”的总数为偶数。偶校验时,校验位按如下规则设定:如果每字节的数据位中“1”的个数为奇数,则校验位为“1”;若为偶数,则校验位为“0”。偶校验常用于异步传输或低速传输。校验的原理是:如果采用奇校验,发送端发送的一个字符编码(含校验位)中,“1”的个数一定为奇数个,在接收端对接收字符二进制位中的“1”的个数进行统计,若统计出“1”的个数为偶数个,则意味着传输过程中有1位(或奇数位)发生差错。事实上,在传输中偶然—位出错的机会最多,故奇偶校验法经常采用。然而,奇偶校验法并不是一种安全的检错方法,其识别错误的能力较低。如果发生错误的位数为奇数,那么错误可以被识别,而当发生错误的位数为偶数时,错误就无法被识别了,这是因为错误互相抵消了。数位的错误,以及大多数涉及偶数个位的错误都有可能检测不出来。它的缺点在于:当某一数据分段中的一个或者多位被破坏时,并且在下一个数据分段中具有相反值的对应位也被破坏,那么这些列的和将不变,因此接收方不可能检测到错误。常用的奇偶校验法为垂直奇偶校验、水平奇偶校验和水平垂直奇偶校验。2.垂直奇偶校验垂直奇偶校验是在垂直方向上以列的形式附加上校验位。数据格式及其发送顺序:设垂直奇偶校验的编码效率为R,则:式中,m为码字的定长位数,n为码字的个数。垂直奇偶校验又称为纵向奇偶校验,它能检测出每列中发生的奇数个错误,偶数个错误,因而对差错的漏检率接近1/2。3.水平奇偶校验水平奇偶校验是在水平方向上以行的形式附加上校验位。设水平奇偶校验的编码效率为R,则:式中,m为码字的定长位数,n为码字的个数。水平奇偶校验又称为横向奇偶校验,它不但能检测出各段同一位上发生的奇数个错误,而且还能检测出突发长度≤m的所有突发错误,其漏检率要比垂直奇偶校验法低,但是实现水平奇偶校验时,一定要使用数据缓冲器。4.水平垂直奇偶校验水平垂直奇偶校验是在结合水平奇偶校验和垂直奇偶校验的基础上形成的一种校验方法。它是在一批字符传送之后,另外增加一个称为“方块校验字符”的检验字符,方块校验字符的编码方式是使所传输字符代码的每个纵向列中位代码的“1”的个数成为奇数(或偶数)。式中,m为码字的定长位数,n为码字的个数。设水平垂直奇偶校验的编码效率为R,则:水平垂直奇偶校验又称为纵横奇偶校验。它能检测出传输过程中发生的所有3位或3位以下的错误、奇数个错误、大部分偶数个错误以及突发长度≤m+1的突发错误,可使误码率降至原误码率的百分之一到万分之一,有较强的检错能力,但是有部分偶数个错误不能检测出来。水平垂直奇偶校验还可以自动纠正差错,使误码率降低2~4个数量级,适用于中、低速传输系统和反馈重传系统,被广泛用于通信和某些计算机外部设备中。5.循环冗余校验法循环冗余校验(CRC,CyclicRendancyCheck)法由分组线性码的分支而来,主要应用于二元码组。它是利用除法及余数的原理来作错误侦测(ErrorDetecting)的。这是一种比较精确、安全的检错方法,能够以很大的可靠性识别传输错误,并且编码简单,误判概率很低,但是这种方法不能够校正错误。循环冗余校验法在通信系统中得到了广泛的应用,特别适用于传输数据经过有线或无线接口时识别错误的场合。下面重点介绍循环冗余校验法。
❷ 如何判断一个数的位数
x不用加引号
而且c语言里是不支持这种写法的
10<=x<=99 帮你改了下 看看吧
#include
void main()
{
int x,a,b,c,d;
scanf("%d",&x);
if (10000<=x&&x<=99999)
{
printf("%d是五位数\n",x);
a=x;
}
if (1000<=x&&x<=9999)
{
printf("%d是四位数\n",x);
b=x;
}
if (100<=x&&x<=999)
{
printf("%d是三位数\n",x);
c=x;
}
if (10<=x&&x<=99)
{
printf("%d是二位数\n",x);
d=x;
}
else
{
printf("%d是一位数\n",x);
}
}
追问:
哦 加上&&之后可以了 谢谢啊 但是有个问题 我之前写了一道题 也是范围变量 但是我没有用&& 照样可以用啊 为什么会这样 就是这个
#include
void main()
{
float a,s;
scanf("%f",&a);
if (0<a<=10)
{
s=10*0.1;
}
if (10<a<=20)
{
s=1+(a-10)*0.075;
}
if (20<a<=40)
{
s=1+0.75+(a-20)*0.05;
}
if (40<a<=60)
{
s=1+0.75+1+(a-40)*0.03;
}
if (60<a<=100)
{
s=1+0.75+1+0.6+(a-60)*0.015;
}
if (100<a)
{
s=1+0.75+1+0.6+0.6+(a-100)*0.01;
}
printf("%f",s);
}
谢谢诶!
回答:
呵呵 不客气 不过还有更简单的方法
有兴趣的话 我可以写给你看看
补充:
这种方法更快速 代码更简洁
如果我的回答对你有所帮助
记得选个满意答案哦
#include "stdio.h"
void main()
{
int num,i=0;
printf("输入一个整数:");
scanf("%d",&num);
while (num)
{
num/=10;
++i;
}
printf("%d位数\n",i);
}
追问:
我知道有 我只是刚学的 所以写的繁琐点 但容易懂 你能不能跟我说一下 我补充的的那个 为什么可以用的? 很奇怪呃 哦 还有 你改的这个程序 只有一位 两位数只显示XX是几位 其余的除了显示几位还有显示一位 怎么回事? 谢谢
回答:
逻辑判断必须用&& ||来完成
可以用是因为他通过了语法分析
但是逻辑上是不正确的
能出现正确结果只是个巧合
另外你说我的程序的问题我不是很明白
能不能截图发给我呢?
补充:
拿最简单的比方来说吧
if(1<=x<=3)
他是先运算1<=x的值然后再和3比较
而这个式子要么就是true也就是1要么是false 0
怎么都比3小
所以不管你怎么写 这个式子都很难不成立
当然不会报错了
❸ C语言中怎样判断一个数是几位数,看代码谢谢!
这里你定义的n是int型,C语言中int型的范围是-2147483648~2147483647。如果要判断10位以上,至少应该将n定义为long型。
❹ 怎么判断海明码的检错和纠错位数求解释
海明码是纠错码。利用公式m+k+1 ≤ 2^k (m是信息位数,k是纠错位数)
比如:8位的信息位,那么k的最小值就应该为4,所以8为的信息码需要4位的海明纠错码!
❺ java如何判断数字的位数
按照num/10 语句,不是应该显示 它是个99位数吗?java是如何判断为3位数的?
答999/10=99;此时num=99count=1;
99/10=9;此时num=9count=2;
9/10=0;此时num=0count=3;
一共在while循环里执行了三次,所以判断是3位数
提示
System.out.println("它是个"+count+"位的数!");
这里输出的是count这个变量,表达的是次数,
不是输出num这个数,此时num经过循环已经等于0了
❻ 校验码谁能告诉我海明码的规则,如何根据数据位算出校验位
根据以下的方法来做吧(建议你好好学学《数据通信》)
海明码是一种可以纠正一位差错的编码。它是利用在信息位为k位,增加r位冗余位,构成一个n=k+r位的码字,然后用r个监督关系式产生
的r个校正因子 来区分无错和在码字中的n个不同位置的一位错。它必需满足以下关系式:
2r>=n+1 或 2r>=k+r+1
海明码的编码效率为:
R=k/(k+r)
式中 k为信息位位数
r为增加冗余位位数
❼ 检错码和纠错码有什么不同
检错码:只检错不纠正
纠错码:发现错误并给以纠正
检错码:一种编码。指在传输过程中发生错误后,在接收端能自动检查并发现错误的编码。目前常用的检错码有奇偶校验码、恒比码等 检错码的两大类别:奇偶校验编码和循环冗余编码。
纠错码(error correcting code),在传输过程中发生错误后能在收端自行发现或纠正的码。仅用来发现错误的码一般常称为检错码。为使一种码具有检错或纠错能力,须对原码字增加多余的码元,以扩大码字之间的差别 ,即把原码字按某种规则变成有一定剩余度(见信源编码)的码字,并使每个码字的码之间有一定的关系。关系的建立称为编码。码字到达收端后,可以根据编码规则是否满足以判定有无错误。当不能满足时,按一定规则确定错误所在位置并予以纠正。纠错并恢复原码字的过程称为译码。检错码与其他手段结合使用,可以纠错。
❽ c语言 输入任意一个整数,判断其是几位数
不会C语言。给出几个算法,代码是fortran的,供参考。
第一种,用整数除法。对于整数a,连续用10除,直到商为零。除法的次数,即为位数。
这个算法对于正负整数和零都能获得正确的结果。
❾ 能检测出2位错误,并能纠正1位错误的效验码是( )
奇偶校验码:通过1的个数判断校验位(1位)是0或1;
BCD码:是一种编码方式;
循环冗余码:能发现多位出错,并对多位纠错;
海明码:通过多位冗余码,可发现多位出错,但只能纠正一位
所以答案为:海明码
❿ 怎么判断一个数是区位码
按照区位码的定义,所有的国标汉字及符号分配在一个94行、94列的方阵中,方阵的每一行称为一个“区”,编号为01区到94区;每一列称为一个“位”,编号为01位到94位,方阵中的每一个汉字和符号所在的区号和位号组合在一起形成的四个阿拉伯数字就是它们的“区位码”。
在区位码中,01-09区为特殊字符,10-55区为一级汉字(3755个最常用的汉字,按拼音字母的次序排列),56-87区为二级汉字(3008个汉字,按部首次序排列),88区到94区为自定义汉字区。
上面的四个数中,9843这个数是超出区码定义范围的。