计算余数的二进制除法
计计计计计算余数的二制除法,异或,
第一步:要在数据位,被除数,后计计 0 , 0 的个数比除数,生成多式,少一位。计计计计计计计第二步:做除法(异或操作),从被除数的五位减去五位的除数。除数的计计计计计一位都与每被除数的位在不计计计计计计计计计计计计计计计计计计计计计及上一位的情况下独立行减法,行涉的是模 2 加,。在本例中,除数 11001 与被除数的前五位 10110 计 行的是模2 加,得到 1111 ,余数 1 前面的 0 被省略,。在被除数中下一个没有使用的比特接着被计计计计计计计抄下来,使得余数的位数和除数的位数相同。如果计计计计计计计计计计计计计计计计计计计计计计
位数不,在商位计计计计计计 0 ,与一般除法相同,,因此,下一计计计 就是步11110^11001 ,果是计计计 111 ,依次推。在二制除法中,除数是以计计计计计计计计计计计计计计计计 1 计计的,然后从上一次的被除数 / 余数中与除数位数相同的部分中减去除数,并且只能从最左位是 1 的被除数 / 余数中减去除数。当被除数每 / 余数的最左位是 0 计计计 ,就在中把步0 计弃,再把被除数中的下一个未使用比特抄下来填充余数,同的商数计计计计计计计计计计计计计计计位一个零,并按上述方法行二制除法运算,一直计计计计计计计计计计计计计计计计计计计计计计计
重个程直到被除数中所有比特都被使用。计计计计计计计计计计计计计计计计计计计计计
余数 100 只有 3 位,而余数计计 4 位,比除数少一位,,因此,取校在前面计计计计计计计填一个 0 ,故其 CRC 校计计计计 0100 ,于是可求出信息的循冗余计计计计计计计计计计计 101100110100 。
计计计计计计计计计计计计计计计计 了判断的正确性,在接收端要有一个CRC 校器。它的计计计计计功能和生器一,当收到计计计计计计计计计 CRC 冗余校后,做同的模计计计计计计计计计 2 除法,注意,里采用的生成多式一定要与送端相同,。如计计计计计计计计计计计计计计计计计计计计计计
果余数是全 0 ,明正确,否,,重。计计计计计计计计计计计计计计计计计计计计
【itoa函数可以将整型数字二制字符串】计计计计计计计计计
1 #include
2 #include
3 #include
4 char res[33];
5 unsigned int data,g,a[33]={0,
6 0x00000001,0x00000002,0x00000004,0x00000008,0x00000010,0x00000020,0x00000040,0x000
00080,
7 0x00000100,0x00000200,0x00000400,0x00000800,0x00001000,0x00002000,0x00004000,0x000
08000,
8 0x00010000,0x00020000,0x00040000,0x00080000,0x00100000,0x00200000,0x00400000,0x008
00000,
9 0x01000000,0x02000000,0x04000000,0x08000000,0x10000000,0x20000000,0x40000000,0x800
00000
10 };
11 unsigned int str_int(unsigned int *d)12 {
13 unsigned int i=0,t=0;
14 char str[40];
15 scanf("%s",str);
16 while (str[i]!='\0'){
17 t<<=1;
18 t|=str[i]-48;
19 i++;
20 }
21 *d=t;
22 return i;
23 }
24 unsigned int GetData(unsigned int i){ return data&a[32-i+1]?1:0;}
25 int main()
26 {
27 unsigned int l1,l2,l3,r,i,cas;
28 printf("计计计计计计计理多少条送数据,\n");
29 scanf("%d",&cas);30 while (cas--){
31 //计计计计计取待送数据k位
32 printf("计计计计计入待送数据M(不高于32位):");33 l1=str_int(&data);34 //计取除数n位
35 printf("计入除数p(不高于%d位):",32-l1+1);36 l2=str_int(&g);37 //将待送数据右移计计计计计计n-1位
38 data<<=(l2-1);39 l1+=(l2-1);
40 //模2除求余数
41 r=0;i=32-l1+1;42 while (i<=32){43 r<<=1;
44 r|=GetData(i);45 if(r>=a[l2]) r^=g;
46 i++;
47 }
48 //计计计出果
49 data>>=(l2-1);50 printf("计计送:%s",itoa(data,res,2));51 itoa(r,res,2);52 l3=strlen(res);53 for(i=l3;i