Booth ’ s Multiplication Algorithm | CPP code to implement booth 's algorithm ; function to perform adding in the accumulator ; updating accumulator with A = A + BR ; function to find the number 's complement ; function to perform right shift ; function to display operations ; accumulator content ; multiplier content ; Function to implement booth 's algo ; SECOND CONDITION ; subtract BR from accumulator ; THIRD CONDITION ; add BR to accumulator ; FIRST CONDITION ; decrement counter ; driver code ; Number of multiplicand bit ; multiplicand ; copy multiplier to temp array mt [ ] ; No . of multiplier bit ; sequence counter ; multiplier
#include <bits/stdc++.h> NEW_LINE using namespace std ; void add ( int ac [ ] , int x [ ] , int qrn ) { int i , c = 0 ; for ( i = 0 ; i < qrn ; i ++ ) { ac [ i ] = ac [ i ] + x [ i ] + c ; if ( ac [ i ] > 1 ) { ac [ i ] = ac [ i ] % 2 ; c = 1 ; } else c = 0 ; } } void complement ( int a [ ] , int n ) { int i ; int x [ 8 ] = { 0 } ; x [ 0 ] = 1 ; for ( i = 0 ; i < n ; i ++ ) { a [ i ] = ( a [ i ] + 1 ) % 2 ; } add ( a , x , n ) ; } void rightShift ( int ac [ ] , int qr [ ] , int & qn , int qrn ) { int temp , i ; temp = ac [ 0 ] ; qn = qr [ 0 ] ; cout << " TABSYMBOL TABSYMBOL rightShift TABSYMBOL " ; for ( i = 0 ; i < qrn - 1 ; i ++ ) { ac [ i ] = ac [ i + 1 ] ; qr [ i ] = qr [ i + 1 ] ; } qr [ qrn - 1 ] = temp ; } void display ( int ac [ ] , int qr [ ] , int qrn ) { int i ; for ( i = qrn - 1 ; i >= 0 ; i -- ) cout << ac [ i ] ; cout << " TABSYMBOL " ; for ( i = qrn - 1 ; i >= 0 ; i -- ) cout << qr [ i ] ; } void boothAlgorithm ( int br [ ] , int qr [ ] , int mt [ ] , int qrn , int sc ) { int qn = 0 , ac [ 10 ] = { 0 } ; int temp = 0 ; cout << " qn TABSYMBOL q [ n + 1 ] TABSYMBOL TABSYMBOL BR TABSYMBOL TABSYMBOL AC TABSYMBOL QR TABSYMBOL TABSYMBOL sc STRNEWLINE " ; cout << " TABSYMBOL TABSYMBOL TABSYMBOL initial TABSYMBOL TABSYMBOL " ; display ( ac , qr , qrn ) ; cout << " TABSYMBOL TABSYMBOL " << sc << " STRNEWLINE " ; while ( sc != 0 ) { cout << qr [ 0 ] << " TABSYMBOL " << qn ; if ( ( qn + qr [ 0 ] ) == 1 ) { if ( temp == 0 ) { add ( ac , mt , qrn ) ; cout << " TABSYMBOL TABSYMBOL A ▁ = ▁ A ▁ - ▁ BR TABSYMBOL " ; for ( int i = qrn - 1 ; i >= 0 ; i -- ) cout << ac [ i ] ; temp = 1 ; } else if ( temp == 1 ) { add ( ac , br , qrn ) ; cout << " TABSYMBOL TABSYMBOL A ▁ = ▁ A ▁ + ▁ BR TABSYMBOL " ; for ( int i = qrn - 1 ; i >= 0 ; i -- ) cout << ac [ i ] ; temp = 0 ; } cout << " STRNEWLINE TABSYMBOL " ; rightShift ( ac , qr , qn , qrn ) ; } else if ( qn - qr [ 0 ] == 0 ) rightShift ( ac , qr , qn , qrn ) ; display ( ac , qr , qrn ) ; cout << " TABSYMBOL " ; sc -- ; cout << " TABSYMBOL " << sc << " STRNEWLINE " ; } } int main ( int argc , char * * arg ) { int mt [ 10 ] , sc ; int brn , qrn ; brn = 4 ; int br [ ] = { 0 , 1 , 1 , 0 } ; for ( int i = brn - 1 ; i >= 0 ; i -- ) mt [ i ] = br [ i ] ; reverse ( br , br + brn ) ; complement ( mt , brn ) ; qrn = 4 ; sc = qrn ; int qr [ ] = { 1 , 0 , 1 , 0 } ; reverse ( qr , qr + qrn ) ; boothAlgorithm ( br , qr , mt , qrn , sc ) ; cout << endl << " Result ▁ = ▁ " ; for ( int i = qrn - 1 ; i >= 0 ; i -- ) cout << qr [ i ] ; }