在进行CRC算法分析中由于要用到多项式除法,取其余数为索要得到的结果,如M%P=R(R为A模B的余数,当然A的长度要大于B)
成都创新互联公司-专业网站定制、快速模板网站建设、高性价比济南网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式济南网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖济南地区。费用合理售后完善,10年实体公司更值得信赖。
到底该如何实现该方法啊
问题补充:
我写了个这样的程序,只要运算得到最后的r位的值
编译的时候可以同过,运行的时候会抛出如下异常
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
at aa.main(aa.java:59)
该如何解决啊
import java.util.*;
public class aa {
public static void main(String[] args)
{String n="101001";
String k="1101";
String r="0";
boolean bool = false;
boolean bools = false;
char truel = '1';
char falsel = '0';
int y=(n.length()+k.length()-1);
int x=k.length();
for(int i=2;ix;i++) //将信息码后面加上r个0
{ r=r+"0";}
String s=n+r;
System.out.println(s);
for(int i=4;in.length();i++)
{ r=r+"0";}
String l=k+r;
System.out.println(l);
boolean [] e = new boolean[y];
boolean [] c = new boolean[y] ;
boolean [] d = new boolean[y] ;
for(int i=0;is.length();i++) //将信息码赋值给一个数组,即被除数
{
if(s.charAt(i) == truel)
bool = true;
else bool = false;
c[i] = bool;
if(c[i] == true)
System.out.print("1");
else
System.out.print("0");
}
System.out.println();
for(int i=0;il.length();i++) //将多项式赋值给一个数组,即除数
{
if(l.charAt(i) == truel)
bool = true;
else bool = false;
d[i]=bool;
if(d[i] == true)
System.out.print("1");
else
System.out.print("0");
}
System.out.println();
for(int j=0;jn.length();j++)
{if(d[j] ==true)
{for(int i=0;iy;i++) //进行按位异或运算
{ e[i]=(c[i]^d[i]);
c[i]=e[i];
}
for(int a=x+j-1;aj;a--)
{d[a+1]=d[a];}
}
else{
for(int a=x+j-1;aj;a--)
{d[a+1]=d[a];}
}
}
for(int i=x;iy;i++)
{ if(c[i] == true)
System.out.print("1");
else
System.out.print("0");
}
System.out.println();
}
}
这条语句 1%2意思是数1对二进行取模运算,得到的是数学中1与2做除法所得的余数,所以结果为1。
java中取模运算其实就是数学中的取余运算,一般用于判定数与数之间能否整除的问题,如判定素数问题。
如果你想要带小数的结果那么在声明的时候就要把变量声明成浮点型
float = 0.0f
double = 0.0
补充
因为你声明的5和2都是int型的变量,所以计算出来的结果也是int型的,int型是整型变量,没有小数部分,所以要把它们声明成浮点数(即小数),例如float=5.0f;float = 2.0f;后边的f表示2.0是float型的单精度浮点数,如果不带f则是默认的double型双精度浮点数。两个float型的数字相除,这样计算的结果也使float型的,所以就会有小数部分出现了