我已经为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循环