Java中的8位全加器仿真程序

时间:2014-09-29 07:30:06

标签: java

我为8位全加法器编写了以下代码。在调试时,main中调用语句的控制转到'eightbitfullAdderFunction',但它没有评估函数中的任何内容。

我收到00000000输出。请帮我解释一下代码,我试过在逻辑上做了很多改动但是没用。

public class CAModifiedBoothsMultiplier {

public byte[] twosComplement(byte x)
{
    byte y= (byte) (~x+1);

    byte mask=1;
    mask = (byte) (mask << 7);
    byte num[] = new byte[10];
    byte i=0;

    for(i=1;i<=8;i++)
    {
        if((y & mask)==0)
           num[i]=0;
        else
           num[i]=1;

        y=(byte) (y<<1);

    }

    return num;

}

public byte[] saveByte(byte number)
{
   byte mask=1;
    mask = (byte) (mask << 7);
    byte num[] = new byte[10];
    byte i=0;

    for(i=1;i<=8;i++)
    {
        if((number & mask)==0)
           num[i]=0;
        else
           num[i]=1;

        number=(byte) (number<<1);
    }
    return num;    
}

public byte[] eightbitFullAdder(byte a,byte b,byte cin)
{
    byte sum=0,temp1=0,cout=0;
    byte sumno[] = new byte[10];
    byte couttemp[]=new byte[10];

    couttemp[8]=cin;
    byte ain[]=saveByte(a);
    byte bin[]=saveByte(b);

    for(int i=8;i<=1;i--)
    {
        temp1= (byte) (ain[i] ^ bin[i]);

        sum = (byte) (temp1^couttemp[i]);
        sum=(byte) (sum<<7);
        sumno[i]=sum;

        cout=(byte) ((ain[i] & bin[i]) | (temp1 & couttemp[i]));

        if(i!=1)
          couttemp[--i]=cout;
    }



    return sumno;
}


public static void main(String args[])
{
    CAModifiedBoothsMultiplier mbm = new CAModifiedBoothsMultiplier();
    byte x=5;
    byte complementedno[];
    complementedno = mbm.twosComplement(x);

    for(int i=0;i<=8;i++)
        System.out.print(complementedno[i]);

    System.out.println("\n");

    byte a=2,b=3,cin=0;
    byte fulladder[] = mbm.eightbitFullAdder(a,b,cin);

    for(int i=0;i<=8;i++)
        System.out.print(fulladder[i]);

 }

}

2 个答案:

答案 0 :(得分:4)

在你的方法“eightbitFullAdder”中这一行:

for(int i=8;i<=1;i--)

必须是

for(int i=8;i>=1;i--)

否则,永远不会输入for循环

答案 1 :(得分:1)

可能是这个for循环是在向下计数时检查int i是否小于而不是大于或等于1? &#34; for(int i = 8; i&lt; = 1; i - )...&#34; 比我记得更频繁地完成同样的事情,不用担心。