1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| public DataType mul(DataType src, DataType dest) { String srcStr=src.toString(); String destStr = dest.toString(); boolean srcNeg=false; boolean destNeg=false; if(srcStr.charAt(0)=='1'){ srcNeg=true; srcStr=negation(srcStr); } if(destStr.charAt(0)=='1'){ destNeg=true; destStr=negation(destStr); }
StringBuilder resultStr=new StringBuilder("0".repeat(32)+destStr+"0"); for(int i=32;i>0;i--){ DataType src1=new DataType(srcStr); DataType dest1=new DataType(resultStr.substring(0,32));
if(i==32){ if(destStr.charAt(31)-'0'==0){ resultStr= new StringBuilder(rightshift(resultStr.toString())); continue; }else{ resultStr.replace(0,32,sub(src1,dest1).toString()); resultStr= new StringBuilder(rightshift(resultStr.toString())); } }else{ if(destStr.charAt(i)-destStr.charAt(i-1)==0){ resultStr= new StringBuilder(rightshift(resultStr.toString())); continue; }else if(destStr.charAt(i)-destStr.charAt(i-1)==1){ resultStr.replace(0,32,add(src1,dest1).toString()); resultStr= new StringBuilder(rightshift(resultStr.toString())); }else{ resultStr.replace(0,32,sub(src1,dest1).toString()); resultStr= new StringBuilder(rightshift(resultStr.toString())); } }
} String result=resultStr.substring(32,64); if((srcNeg&&!destNeg)||(!srcNeg&&destNeg)){ result =negation(result); } return new DataType(result); }
public String rightshift(String beforeStr){ StringBuilder afterStr = new StringBuilder(); afterStr.append(beforeStr.charAt(0)); for(int i=0;i<64;i++){ afterStr.append(beforeStr.charAt(i)); } return afterStr.toString(); }
|