Booth ’ s Multiplication Algorithm | C # 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
using System ; class GFG { static 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 ; } } static void complement ( int [ ] a , int n ) { int i ; int [ ] x = new int [ 8 ] ; Array . Clear ( x , 0 , 8 ) ; x [ 0 ] = 1 ; for ( i = 0 ; i < n ; i ++ ) { a [ i ] = ( a [ i ] + 1 ) % 2 ; } add ( a , x , n ) ; } static void rightShift ( int [ ] ac , int [ ] qr , ref int qn , int qrn ) { int temp , i ; temp = ac [ 0 ] ; qn = qr [ 0 ] ; Console . Write ( " 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 ; } static void display ( int [ ] ac , int [ ] qr , int qrn ) { int i ; for ( i = qrn - 1 ; i >= 0 ; i -- ) Console . Write ( ac [ i ] ) ; Console . Write ( " TABSYMBOL " ) ; for ( i = qrn - 1 ; i >= 0 ; i -- ) Console . Write ( qr [ i ] ) ; } static void boothAlgorithm ( int [ ] br , int [ ] qr , int [ ] mt , int qrn , int sc ) { int qn = 0 ; int [ ] ac = new int [ 10 ] ; Array . Clear ( ac , 0 , 10 ) ; int temp = 0 ; Console . Write ( " qn TABSYMBOL q [ n ▁ + ▁ 1 ] TABSYMBOL BR TABSYMBOL " + " TABSYMBOL AC TABSYMBOL QR TABSYMBOL TABSYMBOL sc STRNEWLINE " ) ; Console . Write ( " TABSYMBOL TABSYMBOL TABSYMBOL initial TABSYMBOL TABSYMBOL " ) ; display ( ac , qr , qrn ) ; Console . Write ( " TABSYMBOL TABSYMBOL " + sc + " STRNEWLINE " ) ; while ( sc != 0 ) { Console . Write ( qr [ 0 ] + " TABSYMBOL " + qn ) ; if ( ( qn + qr [ 0 ] ) == 1 ) { if ( temp == 0 ) { add ( ac , mt , qrn ) ; Console . Write ( " TABSYMBOL TABSYMBOL A ▁ = ▁ A ▁ - ▁ BR TABSYMBOL " ) ; for ( int i = qrn - 1 ; i >= 0 ; i -- ) Console . Write ( ac [ i ] ) ; temp = 1 ; } else if ( temp == 1 ) { add ( ac , br , qrn ) ; Console . Write ( " TABSYMBOL TABSYMBOL A ▁ = ▁ A ▁ + ▁ BR TABSYMBOL " ) ; for ( int i = qrn - 1 ; i >= 0 ; i -- ) Console . Write ( ac [ i ] ) ; temp = 0 ; } Console . Write ( " STRNEWLINE TABSYMBOL " ) ; rightShift ( ac , qr , ref qn , qrn ) ; } else if ( qn - qr [ 0 ] == 0 ) rightShift ( ac , qr , ref qn , qrn ) ; display ( ac , qr , qrn ) ; Console . Write ( " TABSYMBOL " ) ; sc -- ; Console . Write ( " TABSYMBOL " + sc + " STRNEWLINE " ) ; } } static void Main ( ) { int [ ] mt = new int [ 10 ] ; int sc , brn , qrn ; brn = 4 ; int [ ] br = new int [ ] { 0 , 1 , 1 , 0 } ; for ( int i = brn - 1 ; i >= 0 ; i -- ) mt [ i ] = br [ i ] ; Array . Reverse ( br ) ; complement ( mt , brn ) ; qrn = 4 ; sc = qrn ; int [ ] qr = new int [ ] { 1 , 0 , 1 , 0 } ; Array . Reverse ( qr ) ; boothAlgorithm ( br , qr , mt , qrn , sc ) ; Console . WriteLine ( ) ; Console . Write ( " Result ▁ = ▁ " ) ; for ( int i = qrn - 1 ; i >= 0 ; i -- ) Console . Write ( qr [ i ] ) ; } }