Multiplication de deux nombres entiers à l'aide des opérateurs au niveau du bit
Comment puis-je multipy deux nombres entiers à l'aide opérateurs au niveau du bit?
J'ai trouvé une mise en œuvre ici. Est-il une meilleure façon de la mise en œuvre de la multiplication?
Par exemple: 2 * 6 = 12 doit être effectuée à l'aide d'opérateurs au niveau du bit.
REMARQUE: les Chiffres sont arbitraires, pas la puissance de 2
- A-t-elle à prendre arbitraire des entiers? Il y a un moyen facile de mettre en œuvre la multiplication si l'un des opérandes doit être une puissance de deux. Aussi, est-ce un devoir à la maison ou que vous essayez de mettre en œuvre une multiplication dans l'assemblée sur un processeur avec jeu d'instructions qui ne comprennent pas de multiplication (ou les deux)?
- puissance de deux mise en œuvre est facile, mais dans ce cas, les entiers ne sont pas une puissance de deux, ils sont arbitraires. Et il n'est pas de Devoirs question, c'est une question d'entrevue. Veuillez vérifier la mise en œuvre, j'ai joint.
- Le lien en question n'existent pas
Vous devez vous connecter pour publier un commentaire.
Source
while(b != 0): if(b is odd) {result = result + a;} a = a * 2; b = b/2;
. Une mathématique simple trick.@Shiv s'astuce est encore plus net lorsqu'il a évité deresult = result + a
Je suis venu ici à la recherche de cette question et je trouve Zengr la réponse correcte. Grâce Zengr!
Mais il y a une modification que je voudrais voir qui est de se débarrasser de l'opérateur " + " dans son code. Cela devrait rendre la multiplication de deux des nombres arbitraires à l'aide de N OPÉRATEURS ARITHMÉTIQUES, mais tous au niveau du bit.
Zengr est tout d'abord la solution:
Ma Réponse serait:
où je voudrais écrire add() comme:
ou de manière récursive en ajoutant que:
source pour plus code: http://www.geeksforgeeks.org/add-two-numbers-without-using-arithmetic-operators/
Celui-ci est purement avec bit-wise opérations.
L'entrée de Wikipedia sur opérateur au niveau du bit applications a certains pseudo-code, mais il utilise l'opérateur d'addition ainsi que les opérateurs au niveau du bit.
Assemblée de l'algorithme:
Cela résulte directement du fait que ax*7 = (ax*8)-ax.
Chaque changement de l'étape de multiplication par 2
En C#
ici est la mise en œuvre de la fonction.
if (temp == 0)
. L'ensemble de l'instruction if, y compris la pause devrait être supprimé. Pour voir cela, appeler la fonction avec les entrées de 1 et 4: Mul(1, 4), et la valeur de retour sera de 2. Clairement 1 x 4 n'est pas 2.Ci-dessous est une solution possible pour la multiplication de deux nombres entiers à l'aide opérateurs au niveau du bit.
Fonction de multiplication() peut être pris à la légère modifié comme ci-dessous à l'aide de Shiv Ajouter() fonction: