帮助JavaScript自扩展位加法器

时间:2010-10-12 06:07:08

标签: javascript binary

嘿伙计们,今天我受到Mincraft制作的16位ALU的启发,试图制作我自己的自扩展加法器。 我今天开始使用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:我通过改变添加功能来接近答案。

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> 

谢谢你们!

3 个答案:

答案 0 :(得分:0)

可能你想要

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

而不是

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

答案 1 :(得分:0)

乍一看,也许你写错了,也许它应该是: document.write(“a + b =”+ add(a,b));

原文缺少“)”并使用“newadd”

另外,我不知道你是否应该使用(i = 0; i = 0; i - )

假设原来的那个,那么也许你应该使用 if(i> 0){     newadd [I] = FULLADD(AI [I],双[I],newadd [I] .charAt(0));

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

}

答案 2 :(得分:0)

另外,我不知道你是否应该使用 for(i = 0; i&lt; ai.length; i ++)或for(i = ai.length-1; i&gt; = 0; i - )

假设原来的那个,那么也许你应该使用:

if(i> 0){ newadd [I] = FULLADD(AI [I],双[I],的 newadd [I] .charAt(0)); newadd [i + 1] = fullAdd(ai [i],bi [i], newadd [i] .charAt(1)); }