C Program to Implement Booth’s Multiplication Algorithm for Multiplication of 2 signed Numbers



             #include <stdio.h>
	#include <math.h>
	 
	int a = 0,b = 0, c = 0, a1 = 0, b1 = 0, com[5] = { 1, 0, 0, 0, 0};
	int anum[5] = {0}, anumcp[5] = {0}, bnum[5] = {0};
	int acomp[5] = {0}, bcomp[5] = {0}, pro[5] = {0}, res[5] = {0};
	 
	void binary(){
	     a1 = fabs(a);
	     b1 = fabs(b);
	     int r, r2, i, temp;
	     for (i = 0; i < 5; i++){
	           r = a1 % 2;
           a1 = a1 / 2;
           r2 = b1 % 2;
           b1 = b1 / 2;
           anum[i] = r;
	           anumcp[i] = r;
	           bnum[i] = r2;
	           if(r2 == 0){
	                bcomp[i] = 1;
	           }
	           if(r == 0){
	                acomp[i] =1;	           }
	     }
   //part for two's complementing
   c = 0;
	   for ( i = 0; i < 5; i++){
	           res[i] = com[i]+ bcomp[i] + c;
	           if(res[i] >= 2){
                c = 1;
	           }
	           else
	                c = 0;
	           res[i] = res[i] % 2;
     }
	   for (i = 4; i >= 0; i--){
	     bcomp[i] = res[i];
	   }
	   //in case of negative inputs
	   if (a < 0){
	      c = 0;
	     for (i = 4; i >= 0; i--){
	           res[i] = 0;
	     }
	     for ( i = 0; i < 5; i++){
	           res[i] = com[i] + acomp[i] + c;
	           if (res[i] >= 2){
	                c = 1;
	           }
	           else
                c = 0;
	           res[i] = res[i]%2;
	     }
	     for (i = 4; i >= 0; i--){
	           anum[i] = res[i];
	           anumcp[i] = res[i];
	     }
	 
	   }
	   if(b < 0){
	     for (i = 0; i < 5; i++){
	           temp = bnum[i];
	           bnum[i] = bcomp[i];
	           bcomp[i] = temp;
	     }
   }
	}
void add(int num[]){
	    int i;
    c = 0;
    for ( i = 0; i < 5; i++){
	           res[i] = pro[i] + num[i] + c;
	           if (res[i] >= 2){
	                c = 1;
	           }
	           else{
	                c = 0;
           } 
	           res[i] = res[i]%2;
	     }
	     for (i = 4; i >= 0; i--){
	         pro[i] = res[i];
         printf("%d",pro[i]);
	     }
	   printf(":");
	   for (i = 4; i >= 0; i--){
	           printf("%d", anumcp[i]);
	     }
	}
	void arshift(){//for arithmetic shift right
	    int temp = pro[4], temp2 = pro[0], i;
    for (i = 1; i < 5  ; i++){//shift the MSB of product
       pro[i-1] = pro[i];
	    }
	    pro[4] = temp;
    for (i = 1; i < 5  ; i++){//shift the LSB of product
	        anumcp[i-1] = anumcp[i];
	    }
	    anumcp[4] = temp2;
	    printf("\nAR-SHIFT: ");//display together
	    for (i = 4; i >= 0; i--){
	        printf("%d",pro[i]);
	    }
	    printf(":");
	    for(i = 4; i >= 0; i--){
	        printf("%d", anumcp[i]);
	    }
	}
	 
	void main(){
	   int i, q = 0;
	   printf("\t\tBOOTH'S MULTIPLICATION ALGORITHM");
	   printf("\nEnter two numbers to multiply: ");
	   printf("\nBoth must be less than 16");
	   //simulating for two numbers each below 16
	   do{
	        printf("\nEnter A: ");
	        scanf("%d",&a);
	        printf("Enter B: ");
	        scanf("%d", &b);
	     }while(a >=16 || b >=16);
	 
	    printf("\nExpected product = %d", a * b);
	    binary();
	    printf("\n\nBinary Equivalents are: ");
	    printf("\nA = ");
	    for (i = 4; i >= 0; i--){
	        printf("%d", anum[i]);
	    }
	    printf("\nB = ");
	    for (i = 4; i >= 0; i--){
	        printf("%d", bnum[i]);
	    }	    printf("\nB'+ 1 = ");
	    for (i = 4; i >= 0; i--){
	        printf("%d", bcomp[i]);
	    }
	    printf("\n\n");
	    for (i = 0;i < 5; i++){
	           if (anum[i] == q){//just shift for 00 or 11
	               printf("\n-->");
	               arshift();
	               q = anum[i];
	           }
	           else if(anum[i] == 1 && q == 0){//subtract and shift for 10
	              printf("\n-->");
	              printf("\nSUB B: ");
	              add(bcomp);//add two's complement to implement subtraction
	              arshift();
	              q = anum[i];
	           }
	           else{//add ans shift for 01
	              printf("\n-->");
	              printf("\nADD B: ");
	              add(bnum);
	              arshift();
	              q = anum[i];
	           }
	     }	 	     printf("\nProduct is = ");
	     for (i = 4; i >= 0; i--){
	           printf("%d", pro[i]);
	     }
	     for (i = 4; i >= 0; i--){
	           printf("%d", anumcp[i]);
	     }
	}
 
 

C Language online compiler

Write, Run & Share C Language code online using OneCompiler's C online compiler for free. It's one of the robust, feature-rich online compilers for C language, running the latest C version which is C18. Getting started with the OneCompiler's C editor is really simple and pretty fast. The editor shows sample boilerplate code when you choose language as 'C' and start coding!

Read inputs from stdin

OneCompiler's C online editor supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample C program which takes name as input and print your name with hello.

#include <stdio.h>
int main()
{
    char name[50];
    printf("Enter name:");
    scanf("%s", name);
    printf("Hello %s \n" , name );
    return 0;
    
}

About C

C language is one of the most popular general-purpose programming language developed by Dennis Ritchie at Bell laboratories for UNIX operating system. The initial release of C Language was in the year 1972. Most of the desktop operating systems are written in C Language.

Key features:

  • Structured Programming
  • Popular system programming language
  • UNIX, MySQL and Oracle are completely written in C.
  • Supports variety of platforms
  • Efficient and also handle low-level activities.
  • As fast as assembly language and hence used as system development language.

Syntax help

Loops

1. If-Else:

When ever you want to perform a set of operations based on a condition if-else is used.

if(conditional-expression) {
   // code
} else {
   // code
}

You can also use if-else for nested Ifs and if-else-if ladder when multiple conditions are to be performed on a single variable.

2. Switch:

Switch is an alternative to if-else-if ladder.

switch(conditional-expression) {    
case value1:    
 // code    
 break;  // optional  
case value2:    
 // code    
 break;  // optional  
...    
    
default:     
 // code to be executed when all the above cases are not matched;    
} 

3. For:

For loop is used to iterate a set of statements based on a condition.

for(Initialization; Condition; Increment/decrement){  
  // code  
} 

4. While:

While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.

while(condition) {  
 // code 
}  

5. Do-While:

Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.

do {
  // code 
} while (condition); 

Arrays

Array is a collection of similar data which is stored in continuous memory addresses. Array values can be fetched using index. Index starts from 0 to size-1.

Syntax

One dimentional Array:

data-type array-name[size];

Two dimensional array:

data-type array-name[size][size];

Functions

Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increases re-usuability and modularity.

Two types of functions are present in C

  1. Library Functions:

Library functions are the in-built functions which are declared in header files like printf(),scanf(),puts(),gets() etc.,

  1. User defined functions:

User defined functions are the ones which are written by the programmer based on the requirement.

How to declare a Function

return_type function_name(parameters);

How to call a Function

function_name (parameters)

How to define a Function

return_type function_name(parameters) {  
  //code
}