2011-03-28 2 views
0

Je veux obtenir le nombre opposé de nombre binaire (signifie x -> - (x) et - (x) -> x).numéro binaire opposé

Quel sera l'algorithme? J'ai pensé à changer tous les bits ("1" à "0" et "0" à "1") et ajouter "1" à cela. Est-ce que c'est bon ?

thnx

+1

Vous pouvez google que: http://www.math.grin.edu/~rebelsky/Courses/152/97F/Readings/student-binary#neg –

Répondre

4

Votre algorithme est correct pour deux des numéros de complément:

-x = ~x + 1 

Pour un complément à, vous pouvez utiliser:

-x = ~x 

Et pour les nombres signe magnitude:

-x = x^(1 << n) 

n est le décalage du bit de signe dans le mot. J'utilise la notation de l'opérateur C ici - ^ est l'opérateur exclusif au niveau du bit ou << est un décalage vers la gauche.

Pour une autre représentation numérique, vous devez utiliser une autre opération.

+0

Pouvez-vous me fournir avec un meilleur algorithme? thnx – Batman

+0

@Adam D - il n'y a pas de "meilleur algorithme". Dans n'importe quel langage raisonnable, vous pouvez simplement écrire '-x', alors pourquoi faire autre chose que cela? –

+0

@Adam D meilleur algorithme? Cela sonne comme un devoir ... –

3

Cela dépend de la façon dont les nombres négatifs sont représentés. Vous avez besoin de la représentation du complément à deux? Vous avez besoin d'une représentation de complément?

Pour plus de détails, consultez wikipedia

+0

En fait, c'est pour un programme d'assemblage MIPS je vous écris que changer un nombre dans $ s0 à son opposé, alors quoi de mieux? – Batman

+0

Pourquoi ne pas simplement faire $ s0 = 0 - $ s0. Ensuite, vous n'avez pas à vous soucier de la façon dont les nombres négatifs sont représentés. Vous saurez avec certitude que votre résultat est le bon, quelle que soit l'architecture de votre processeur. –