2010-09-21 7 views
1

Donc le problème est d'ajouter 3 nombres ensemble (complément à 2) en C. Normalement cela devrait être très simple, mais la partie difficile de ce problème est que vous ne pouvez utiliser que les opérations! ~ &^| < < >>, aucune sorte de boucles, ou appels de fonction, ou quelque chose de fantaisie. Juste ces ops. Il nous donne une fonction qui ajoute 2 mots ensemble. Le retour de la fonction que j'écris (sum3) est la somme de retour (mot1, mot2). Ma responsabilité est de déterminer ce qu'il faut mettre mot1 et mot2 pour que l'appel à la fonction somme me donne la bonne réponse. Oh, et aussi je ne peux utiliser que 16 au total de ces opérations là-bas.Avoir des problèmes avec certains devoirs, programmation C

J'ai essayé la mise word1 à x^y, et mot2 à (x & y) < < 1 pour voir si je suis arrivé au moins la bonne réponse de celui pour les 2 premiers chiffres, et il finit toujours correct. Cependant, je n'ai aucune idée de comment lancer z dans le mélange sans tout gâcher. Je pense que c'est le plus gros problème ... quelqu'un m'aidera s'il vous plaît, j'ai foiré et je ne me suis pas rendu compte que c'était dans 5 heures à partir de maintenant, alors je panique. Au moins un bon indice ... quelque chose, n'importe quoi.

+1

Pourriez-vous donner plus de détails? Un exemple peut-être? Désolé mais j'ai de la difficulté à comprendre la question :-) –

+0

Aucune idée d'où vient 'z', et ce que sum() et sum3 (sont l'un pour l'autre). Ou pourquoi vous avez besoin de mettre en place les arguments (word1, word2) –

+0

Je suis désolé, je suppose que dans mon empressement je n'expliquais pas bien les choses. Essentiellement, ce que l'on me donne est une fonction à compléter, sum3, qui prend 3 paramètres, x y et z. sum3 calcule la somme de x y et z sans moi en utilisant un + ops. Il fournit un appel de fonction dans l'instruction return de sum3, qui est sum (word1, word2) qui ajoute normalement word1 et word2. À l'intérieur de sum3, je dois définir word1 et word2 égal à tout ce dont j'ai besoin pour pouvoir ajouter les 3 (x y et z) ensemble. – Adan

Répondre

3

Juste un indice: a + b == (a^b) + ((a & b) << 1). Ici a & b est l'expression pour porter.

Comme vous pouvez le voir, par cette transformation, vous réduisez un ajout de N bits à certaines opérations logiques et un ajout sur N-1 bits. Si le N est donné, vous pouvez dérouler manuellement la boucle et le résultat entier ne contiendra que XOR, AND et SHL (1).

Questions connexes