2012-09-09 5 views
0

Je travaille sur un programme qui me permettra de multiplier/diviser/ajouter/soustraire des nombres binaires ensemble. Dans mon programme, je fais représenter tous les entiers comme des vecteurs de chiffres. J'ai réussi à comprendre comment faire cela avec l'addition, mais la multiplication m'a fait trébucher et je me demandais si quelqu'un pouvait me donner quelques conseils sur la façon d'obtenir le pseudo code comme un guide pour ce programme.Multiplication de deux entiers donnés en binaire

Merci d'avance!

EDIT: J'essaie de comprendre comment créer l'algorithme pour la multiplication encore pour éclaircir les choses. Toute aide sur la façon de comprendre cet algorithme serait appréciée. Je ne travaille généralement pas avec le C++, donc ça me prend un peu plus de temps pour comprendre les choses.

+0

êtes-vous capable de diviser/multiplier les nombres binaires? – cprogcr

+3

Pensez à la façon dont vous avez appris à faire la multiplication et la longue division à la main avec des nombres décimaux à l'école primaire. Vous pouvez utiliser les mêmes principes pour les binaires. Essayez-le d'abord avec un crayon et du papier, juste pour vous assurer de comprendre les algorithmes, puis le coder. –

Répondre

2

multiplication longue en pseudocode ressemblerait à quelque chose comme:

vector<digit> x; 
vector<digit> y; 

total = 0; 
multiplier = 1; 
for i = x->last -> x->first //start off with the least significant digit of x 
    total = total + i * y * multiplier 
    multiplier *= 10; 

return total 
+0

Hmm .. Pourriez-vous décrire ce que vous voulez dire par le x-> last -> x-> first? – Valrok

+0

@Julian commence à partir du dernier chiffre de 'x' et travaille jusqu'à la première. Donc, pour le nombre '156', vous commencerez par' i = 6', puis 5 et ensuite 1. –

0

Juste essayé quelque chose, et ceci travail si vous ne se multiplient les valeurs non signées en binaire:

unsigned int multiply(unsigned int left, unsigned int right) 
{ 
    unsigned long long result = 0; //64 bit result 

    unsigned int R = right; //32 bit right input 
    unsigned int M = left; //32 bit left input 

    while (R > 0) 
    { 
     if (R & 1) 
     {// if Least significant bit exists 
      result += M; //add by shifted left 
     } 
     R >>= 1; 
     M <<= 1; //next bit 
    } 

/*-- if you want to check for multiplication overflow: -- 
    if ((result >> 32) != 0) 
    {//if has more than 32 bits 
     return -1; //multiplication overflow 
    }*/ 

    return (unsigned int)result; 
} 

Cependant, c'est au niveau binaire de celui-ci ... Je juste vous avez le vecteur de chiffres en entrée