Java Program to Implement Booth Algorithm

This is a Java Program to implement Booth Algorithm. This is a program to compute product of two numbers by using Booth’s Algorithm. This program is implemented for multiplying numbers in the range -7 to 7. However same principle can be extended to other numbers too.

Here is the source code of the Java program to implement Booth Algorithm. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.

/**
 ** Java Program to Implement Booth Algorithm
 **/
 
import java.util.Scanner;
 
/** Class Booth **/
public class Booth
{
    public static Scanner s = new Scanner(System.in);
    /** Function to multiply **/
    public int multiply(int n1, int n2)
    {
        int[] m = binary(n1);
        int[] m1 = binary(-n1);
        int[] r = binary(n2);        
        int[] A = new int[9];
        int[] S = new int[9];
        int[] P = new int[9];        
        for (int i = 0; i < 4; i++)
        {
            A[i] = m[i];
            S[i] = m1[i];
            P[i + 4] = r[i];
        }
        display(A, 'A');
        display(S, 'S');
        display(P, 'P');        
        System.out.println();
 
        for (int i = 0; i < 4; i++)
        {
            if (P[7] == 0 && P[8] == 0);
                // do nothing            
            else if (P[7] == 1 && P[8] == 0)
                add(P, S);                            
            else if (P[7] == 0 && P[8] == 1)
                add(P, A);            
            else if (P[7] == 1 && P[8] == 1);
                // do nothing
 
            rightShift(P);
            display(P, 'P');
        }
        return getDecimal(P);
    }
    /** Function to get Decimal equivalent of P **/
    public int getDecimal(int[] B)
    {
        int p = 0;
        int t = 1;
        for (int i = 7; i >= 0; i--, t *= 2)
            p += (B[i] * t);
        if (p > 64)
            p = -(256 - p);
        return p;        
    }
    /** Function to right shift array **/
    public void rightShift(int[] A)
    {        
        for (int i = 8; i >= 1; i--)
            A[i] = A[i - 1];        
    }
    /** Function to add two binary arrays **/
    public void add(int[] A, int[] B)
    {
        int carry = 0;
        for (int i = 8; i >= 0; i--)
        {
            int temp = A[i] + B[i] + carry;
            A[i] = temp % 2;
            carry = temp / 2;
        }        
    }
    /** Function to get binary of a number **/
    public int[] binary(int n)
    {
        int[] bin = new int[4];
        int ctr = 3;
        int num = n;
        /** for negative numbers 2 complment **/
        if (n < 0)
            num = 16 + n;
        while (num != 0)
        {
            bin[ctr--] = num % 2;
            num /= 2;
        }
        return bin;
    }
    /** Function to print array **/
    public void display(int[] P, char ch)
    { 
        System.out.print("\n"+ ch +" : ");
        for (int i = 0; i < P.length; i++)
        {
            if (i == 4)
                System.out.print(" ");
            if (i == 8)
                System.out.print(" ");
            System.out.print(P[i]);
        } 
    }
    /** Main function **/
    public static void main (String[] args) 
    {
        Scanner scan = new Scanner(System.in);
        System.out.println("Booth Algorithm Test\n");
        /** Make an object of Booth class **/
        Booth b = new Booth();
 
        /** Accept two integers **/
        System.out.println("Enter two integer numbers\n");
        int n1 = scan.nextInt();
        int n2 = scan.nextInt();
        int result = b.multiply(n1, n2);
        System.out.println("\n\nResult : "+ n1 +" * "+ n2 +" = "+ result);                    
    }
}
Booth Algorithm Test
 
Enter two integer numbers
 
7 -7
 
A : 0111 0000 0
S : 1001 0000 0
P : 0000 1001 0
 
P : 1100 1100 1
P : 0001 1110 0
P : 0000 1111 0
P : 1100 1111 1
 
Result : 7 * -7 = -49

Related posts:

Apache Commons Collections Bag
Lớp Properties trong java
Introduction to Spliterator in Java
Java Program to Implement the Edmond’s Algorithm for Maximum Cardinality Matching
Adding Parameters to HttpClient Requests
ClassNotFoundException vs NoClassDefFoundError
Creating a Web Application with Spring 5
Java Program to Create a Random Linear Extension for a DAG
Tìm hiểu cơ chế Lazy Evaluation của Stream trong Java 8
Hướng dẫn Java Design Pattern – Transfer Object
An Intro to Spring Cloud Security
How to Read a File in Java
Java Program to Implement Queue using Linked List
Java 9 Stream API Improvements
Java Program to Implement SynchronosQueue API
A Guide to Spring Boot Admin
Java Program to Generate a Random Subset by Coin Flipping
Java Program to Find the Number of Ways to Write a Number as the Sum of Numbers Smaller than Itself
Debugging Reactive Streams in Java
Java Program to Generate Random Numbers Using Probability Distribution Function
Java Program to Implement ConcurrentLinkedQueue API
Toán tử instanceof trong java
Spring Boot - Building RESTful Web Services
Hướng dẫn Java Design Pattern – Composite
Object Type Casting in Java
Java Program to find the maximum subarray sum using Binary Search approach
Java Program to Apply DFS to Perform the Topological Sorting of a Directed Acyclic Graph
How to Iterate Over a Stream With Indices
Check if there is mail waiting
Java Program to Implement Fenwick Tree
Java Program to Implement HashMap API
Batch Processing with Spring Cloud Data Flow