我已经为8位全加器编写了以下代码。在调试时,来自main中的调用语句的控件将转到'eightbitfullAdderFunction',但它未对函数中的任何内容进行求值。我正在获得000000000的输出。请帮助我编写代码,我尝试对逻辑进行很多更改,但没有用。

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]);

 }

}

最佳答案

在您的方法“ eightbitFullAdder”中,此行:

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


一定是

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


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

10-02 21:24