2010-10-12 66 views
0

嘿傢伙,今天我受到了Mincraft製造的16位ALU的啓發,嘗試製作自己的自我擴展加法器。 我今天從字面上開始使用JavaScript,過去幾天一直在玩邏輯門。所以我對此很新。幫助JavaScript自我擴展鑽頭

這是我的代碼到目前爲止。

<html> 
<body> 
    <script type="text/javascript"> 

     function add(ai, bi) { 
     var newadd = [ai.length+1]; 
      for(i = 0 ; i < ai.length ; i ++) { 
       if(i>0) { 
        newadd[i]=fullAdd(ai[i],bi[i],fullAdd(ai[i-1],bi[i-1],0).charAt(1)).charAt(0);; 

       } 
       else { 
        newadd[i]=fullAdd(ai[i],bi[i],0).charAt(0); 

       } 
      } 
      return newadd; 
     } 

     function fullAdd(ai, bi, ci) { 
      var ao = ((ai^bi)^ci); 
      var co = (((ai^bi)&ci)|(ai&bi)); 
      return ao+""+co; 
     } 

     var a = [1,0]; 
     var b = [0,1]; 
     document.write("a + b = " + add(a,b)); 

    </script> 
</body> 

我在做什麼錯? 我敢肯定這是愚蠢的或愚蠢的,或者我的自我設計的系統不起作用。 無論如何感謝您的幫助提前! -Devan

注意:全加器確實工作並返回它應該的字符。問題是添加功能。

編輯:固定2個明顯的錯誤

EDIT2:我已經改變了add函數有點接近答案。

EDIT3:解決了,這裏要說的是工作

<html> 
<body> 
    <script type="text/javascript"> 

     function add(ai, bi) { 
     var newadd = [ai.length+1]; 
      for(i = 0 ; i < ai.length+1 ; i ++) { 
       if(i>0) { 
        newadd[i]=fullAdd(ai[i],bi[i],fullAdd(ai[i-1],bi[i-1],0).charAt(1)).charAt(0);; 
       } 
       else { 
        newadd[i]=fullAdd(ai[i],bi[i],0).charAt(0); 
       } 
      } 
      return newadd; 
     } 

     function fullAdd(ai, bi, ci) { 
      var ao = ((ai^bi)^ci); 
      var co = (((ai^bi)&ci)|(ai&bi)); 
      return ao+""+co; 
     } 

     var a = [1,0,1,1]; 
     var b = [0,1,0,1]; 
     document.write("a + b = " + add(a,b)); 

    </script> 
</body> 

謝謝你們的代碼!

回答

0

另外,我不知道是否應該使用 爲(I = 0;我< ai.length;我++)或(I = ai.length-1;我> = 0;我 - )

假設原來的,那麼也許應該使用:

如果(I> 0){ newadd [I] = FULLADD(AI [I],雙[I ],newadd [i] .charAt(0)); newadd [i + 1] = fullAdd(ai [i],bi [i],newadd [i] .charAt(1)); }

+0

是的,我剛剛解決它,使用你使用的變化。 (for語句中的ai.length + 1) – 2010-10-12 06:49:53

0

可能是你想要

document.write("a + b = " + add(a,b)); 

,而不是

document.write("a + b = " + newadd(a,b); 
+0

這將有所幫助,但仍不是主要問題=( – 2010-10-12 06:20:47

+0

我得到「a + b = 1,01,1」應該是什麼樣的正確結果? – mykhal 2010-10-12 06:23:13

+0

它應該讀取0,1,1, – 2010-10-12 06:26:24

0

乍一看,也許你寫的不對,也許應該是: 文件撰寫( 「A + B =」 + add(a,b));

原來缺少 「)」 最後,用 「newadd」

另外,我不知道你是否應該使用(I = 0; i = 0;我 - )

如果(i> 0)newadd [i] = fullAdd(ai [i],bi [i],newadd [i] .charAt(0)),則可以使用 。

newadd[i+1]=fullAdd(ai[i],bi[i], newadd[i].charAt(1)); 

}

+0

是的,謝謝。那些已經修復的添加方法仍然無法正常工作。 – 2010-10-12 06:25:54