模二除法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include
#include
#include

void print_2(unsigned int val2);
void print_B(unsigned int val);
int BinaryModDiv(int M,int P);


int main()
{
int M=0,P=0,R=0,i=0,R_L=0,P_L=0;
printf("欢迎使用CRC校验码计算程序,本程序最大支持32bit目标序列\n");
while(1)
{
printf("请以16进制输入M和P,之间用空格隔开,结束请输入- C:");
scanf("%x %x",&M,&P);
if(M==0&&P==0)break;
printf("目标序列M=");print_B(M);
printf("求余除数P=");print_B(P);
R=BinaryModDiv(M,P);
R_L=log(R)/log(2)+0.01;
P_L=log(P)/log(2)+0.01;
printf("冗余码R=");
//printf("%d,%d",P_L,R_L);
for(i=1;iprint_B(R);
}
printf("Thankyou for Using!");
system("pause");
}

void print_2(unsigned int val2)//二进制输出(高位0也输出)
{
unsigned char *p = (unsigned char*)&val2 + 3; //从低位到高位,低端字节计算机
for(int k = 0; k <= 3; k++)
{
int val2 = *(p-k);
for (int i = 7; i >= 0; i--)
{
if(val2 & (1 << i))
printf("1");
else
printf("0");
}
printf(" ");
}
printf("\n");
}

void print_B(unsigned int val)//二进制输出(高位0不输出)
{
unsigned char i=0,M_L=0,j=0;//记录高位
unsigned int mark=1,Result=0;
M_L= log(val)/log(2)+0.01;
mark=mark<//for(j=0;j<32-M_L;j++) printf(" ");
while(mark)
{
Result=val&mark;
if(Result)printf("1");
else printf("0");
if((i-M_L%8)%8==0)printf(" ");
i++;
mark=mark>>1;
}
printf("\n");
}


int BinaryModDiv(int M,int P)//二进制模二除法
{
int M_L=0,P_L=0,_M=0,_P=0,i=0,dl=0;
P_L=log(P)/log(2)+0.01;//获得校验码位数
_M=M<printf("冗余位数n=%d\n",P_L);
printf("模二除法运算过程:\n");
while(1)
{
M_L=log(_M)/log(2)+0.01;
dl=M_L-P_L;
if(M_L_P=P<printf("_M=");print_2(_M);
printf("_P=");print_2(_P);
_M=_M^_P;
}
return _M;
}



相关文档
最新文档