2011-10-11 3 views
0

Je travaille donc sur un devoir pour mon cours de science informatique, nous devons prendre un algorithme thats écrit en C et le répliquer dans l'assemblage (SPARC). Mon problème est que je connais très peu de code C depuis que je me spécialise dans Java. Quelqu'un peut-il m'aider à regarder ce code et me donner son équivalent Java? Si vous avez des conseils pour l'utiliser directement pour SPARC, je suis ouvert à ces idées aussi. Merci!Traduction du code C simple

neg = multiplier >= 0 ? 0 : 1; 
product = 0; 
for (i = 32; --i >= 0;) { 
    if (multiplier & 1) 
     product += multiplicand; 
    (product and multiplier registers) >> 1; 
} 
if (neg) 
    product -= multiplicand; 
+1

N'est-il pas plus facile d'apprendre les opérateurs 2-3 que vous ne connaissez pas encore et de les traduire directement en assemblage? De plus, vous ne devriez pas toujours essayer de tout mapper à quelque chose de haut niveau, essayez d'élargir vos connaissances :) Aussi, dites-nous quel opérateur vous ne comprenez pas .. – duedl0r

+0

J'ai appris les opérateurs, mais c'est encore un peu confus quant à l'interprétation de le code fait avec – AlbChu

+2

Le manque de connaissance de C ne devrait pas être un problème pour compléter cette affectation. Si vous êtes un étudiant CS, les primitives utilisées dans cet extrait devraient être bien connues. – erlando

Répondre

0

Il s'agit d'un code pour implémenter la multiplication (bien que le code donné soit erroné) par vous-même, sans utiliser l'opérateur *. Voir cet extrait,

int multiplier, multiplicand,product=0; 

/*Assume multiplier and multiplicand have their values*/ 

for(int i= multiplier;i>0;i--) 
{ 
product+=multiplicand; 
} 

vous par code pour gérer les nombres négatifs. (Espoir que maintenant vous savez ce que le code fait) .La neg dans votre code est censé vérifier si le multiplicateur est négatif, mais ce ne est pas efficace Pour vérifier uniquement le multiplicateur, vous devez vérifier à la fois multiplier et multiplicand.

1

La syntaxe de C est vraiment proche de la syntaxe de Java. Surtout en ce qui concerne ce snipped donc vous ne devriez pas avoir de problèmes pour le comprendre.

Quoi qu'il en soit, je ne pense pas que « et » existe en C.

Etes-vous sûr ou votre extrait?

Qu'est-ce que vous ne comprenez pas dans ce code?

+2

Cela aurait dû être un commentaire, pas une réponse. – DarkDust

+0

Oui, désolé pour cela. – lc2817

0

Dans ce morceau de code il n'y a qu'un seul concept qui est differnt en Java:

pur C n'a pas boolean. Donc, toute comparaison est vraie si l'expression renvoie autre chose que zéro. Je vois deux endroits dans le code où cela compte.

Oh, and n'est pas connu non plus dans C. Êtes-vous sûr que c'est du pur C? Aussi celui-ci est hargneux pas C:

(product and multiplier registers) >> 1; 

Je suppose que cela signifie:

product >>= 1;  // or >>>=, depends on signed/unsigned 
multiplier >>= 1; // or >>>=, depends on signed/unsigned 

Si vous connaissez Java, il devrait y avoir aucun problème pour comprendre ce qui se passe avec ces conseils.

+1

Si cela ne devrait pas poser de problème, alors vous pouvez m'expliquer ce que '(produits et multiplicateurs) >> 1;' fait. – duedl0r

+0

Il semble être pseudo-code. –

+0

@ duedl0r - édité –