⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 booth算法.txt

📁 java实现booth算法
💻 TXT
字号:
1    
  2    var cnt=0;
  3    var bufstr;
  4    var mdat, y1, y2, ny, my;
  5    function renew(){
  6        bufstr="";
  7        cnt=0;
  8        document.boothForm.xdat.value ="";
  9        document.boothForm.ydat.value ="";
 10        document.boothForm.y1dat.value="";
 11        document.boothForm.y2dat.value="";
 12        document.boothForm.nydat.value="";
 13        document.boothForm.mydat.value="";
 14        document.boothForm.yydat.value="";
 15        qty.innerHTML = "";
 16        pty.innerHTML = "";
 17    }
 18    function BinStr(m, n)
 19    {
 20        str="";
 21        for(i=0; i<n; i++){
 22             if(m%2 ==0) str="0"+str;
 23             else  str="1"+str;
 24             m>>=1;
 25        }
 26        return str;
 27    }
 28    function BoothSet()
 29    {
 30        if(cnt>4)return;
 31        switch(cnt){
 32            case 0:
 33             x = document.boothForm.xdat.value;
 34             y = document.boothForm.ydat.value;
 35             mdat = (x&255)<<1;
 36             y1=y;
 37             y2=y<<1;
 38             ny=-y1;
 39             my=-y2;
 40             k=7;
 41             document.boothForm.y1dat.value = BinStr(y, 8);
 42             document.boothForm.y2dat.value = BinStr(y<<1, 8);
 43             document.boothForm.nydat.value = BinStr(-y, 8);
 44             document.boothForm.mydat.value = BinStr(-y<<1, 8);
 45             bufstr = "00000000 "+BinStr(mdat>>1, 8)+" 0";
 46             qty.innerHTML = bufstr;
 47             bufstr = "";
 48             break;
 49            default:
 50             k=mdat&7; ustr="";
 51             bufstr +=(BinStr(mdat>>9, 8)+" "+BinStr(mdat>>1, 8)+" "
 52               +(mdat&1)+" --=> "+BinStr(k, 3)+"<br>\n");
 53             qty.innerHTML = bufstr;
 54             switch(k){
 55                 case 1:
 56                 case 2: mdat+=(y1<<9);
 57                  ustr = BinStr(y1, 8);
 58                  break;
 59                 case 3: mdat+=(y2<<9);
 60                  ustr = BinStr(y2, 8);
 61                  break;
 62                 case 4: mdat+=(my<<9);
 63                  ustr = BinStr(my, 8);
 64                  break;
 65                 case 5:
 66                 case 6: mdat+=(ny<<9);
 67                  ustr = BinStr(ny, 8);
 68                  break;
 69                 default: ustr="00000000";
 70                  break;
 71             }
 72             document.boothForm.yydat.value = ustr;
 73             vstr =(BinStr(mdat>>9, 8)+" "+BinStr(mdat>>1, 8)+" "+(mdat&1)+"<br>\n");
 74             pty.innerHTML = vstr;
 75             bufstr +=(ustr+"<br>\n"+vstr+"<br>\n");
 76             mdat>>=2;
 77             if(cnt>3){
 78                  mdat>>=1;
 79                  pty.innerHTML += "<br>"+BinStr(mdat, 16)
 80                  +":<font color=red><b>"+mdat+"</b></font>  **OK!**\n";
 81             }
 82             break;
 83        }
 84        cnt++;
 85    }
 86    

////////////////
 Booth算法
http://10.214.47.99/shp.php?xyi=145

简单的无符号乘法就是“移位加”。

对于补码的乘法
^^^^^^^^
一、一般的方法是:
1、将乘数与被乘数的补码转换为数值
2、数值相乘
3、将乘积转换为补码。

二、但对补码分析后,发现只要将其中一个转换为数,乘以另一个补码,即是乘积的补码。
因此有:
1、将被乘数的补码转换为数值
2、被乘数数值乘以乘数的补码,即是乘积的补码。

三、对被乘数补码转换成的数值进行处理,提高乘法效率。(Booth)
这步类似于把 y*99 转换成 y*(1)(0)(-1)  ------每个括号表示一位。
所以:12*99
原来:
0012
0099
------
0108
108
------
1188

现在:
0012
(1)(0)(-1)
-------------
-0012
+0000
+1200
-------
1188

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -