DLCAPrac
DLCAPrac
if(M1>M2){
Multiplicand = M1;
Multiplier = M2;
}
else{
Multiplicand = M2;
Multiplier = M1;
}
IntToBin(abs(Multiplier), 'M');
IntToBin(Multiplicand, 'Q');
while(MSize!=QSize){
MSize++;
for(int i = MSize; i>=1; i--){
M[i]=M[i-1];
}
printf("\n");
PrintArr(&M, MSize);
M[0]=0;
}
Twos();
if(Multiplier<0){
}
if(QQ0 == 1){
Add(&M, MSize);
printf("\n\t"); PrintArr(&AQQ0, AQQ0Size); printf("\tA<-A+M");
}
RShift();
printf("\n\t"); PrintArr(&AQQ0, AQQ0Size); printf("\tShift right");
}
printf("\n\nFinal answer:\t"); PrintArr(&AQQ0, AQQ0Size-1);
return 0;
}
int Size = 0;
for(int i = 0; Num != 0; i++){
Temp[i] = abs(Num%2);
Num = Num/2;
Size = i;
}
Size = Size+1;
if(Num<0){
Temp[Size] = 1;
}
else{
Temp[Size] = 0;
}
for(int i = Size; i>=0; i--){
switch(Target){
case 'M':
M[Size-i] = abs(Temp[i]);
MSize = Size;
break;
case 'Q':
Q[Size-i] = Temp[i];
QSize = Size;
break;
case 'A':
AQQ0[Size-i] = Temp[i];
AQQ0Size = Size;
}
return 0;
}
int Twos(){
int Carry = 1;
for(int i = 0; i<=MSize; i++){
M2C[i] = (M[i] == 0)?(1):(0);
}
for(int i = MSize; i>=0 && Carry!=0; i--){
if(abs(M2C[i]+Carry) == 2){
M2C[i] = 0;
Carry = 1;
}
else{
M2C[i] = 1;
Carry = 0;
}
}
}
switch(Sum){
case 0:
AQQ0[QSize-i]=0;
Carry = 0;
break;
case 1:
AQQ0[QSize-i]=1;
Carry = 0;
break;
case 2:
AQQ0[QSize-i]=0;
Carry = 1;
break;
case 3:
AQQ0[QSize-i]=1;
Carry = 1;
break;
}
}
}
int RShift(){
for(int i = AQQ0Size; i>=1; i--){
AQQ0[i]=AQQ0[i-1];
}
}
Output:
Experiment
no: 08
Implement
Restoring
division
algorithm
#include <stdio.h>
#include <math.h>
int AQ[100], AQSize, Q[100], QSize, M[100], MSize, M2C[100];
int PrintArr(int *Target, int TargetSize);
int Add(int *ToAdd, int ToAddSiize);
int LShift();
int IntToBin(int Num, char Target);
int Twos();
int main(){
int Numerator, Denominator, Temp[100], MNeg = 0, M1, M2;
printf("\n\tEntter numerator:"); scanf("%d", &Numerator);
printf("\n\tEnter denominator:"); scanf("%d", &Denominator);
IntToBin(abs(Denominator), 'M');
IntToBin(Numerator, 'Q');
while(MSize!=QSize){
MSize++;
for(int i = MSize; i>=1; i--){
M[i]=M[i-1];
}
printf("\n");
PrintArr(&M, MSize);
M[0]=0;
}
Twos();
if(Numerator<0){
}
else{
AQ[AQSize] = 0;
printf("\n\t"); PrintArr(&AQ, AQSize); printf("\tQ0<-0\t");
Add(&M, MSize);
printf("\n\t"); PrintArr(&AQ, AQSize); printf("\tA<-A+M\t");
}
printf("\n----Count:%d----", i);
}
printf("\n\nFinal answer:\t"); PrintArr(&AQ, AQSize);
return 0;
}
int Size = 0;
for(int i = 0; Num != 0; i++){
Temp[i] = abs(Num%2);
Num = Num/2;
Size = i;
}
for(int i = Size; i>=0; i--){
switch(Target){
case 'M':
M[Size-i] = abs(Temp[i]);
MSize = Size;
break;
case 'Q':
Q[Size-i] = Temp[i];
QSize = Size;
break;
}
return 0;
}
int Twos(){
int Carry = 1;
for(int i = 0; i<=MSize; i++){
M2C[i] = (M[i] == 0)?(1):(0);
}
for(int i = MSize; i>=0 && Carry!=0; i--){
if(abs(M2C[i]+Carry) == 2){
M2C[i] = 0;
Carry = 1;
}
else{
M2C[i] = 1;
Carry = 0;
}
}
}
switch(Sum){
case 0:
AQ[QSize-i]=0;
Carry = 0;
break;
case 1:
AQ[QSize-i]=1;
Carry = 0;
break;
case 2:
AQ[QSize-i]=0;
Carry = 1;
break;
case 3:
AQ[QSize-i]=1;
Carry = 1;
break;
}
}
}
int LShift(){
for(int i = 0; i<AQSize; i++){
AQ[i]=AQ[i+1];
}
AQ[AQSize] = 0;
}
Output: