2010-06-05 13 views
2

Comment puis-je changer le signe d'un nombre?Fonction pour retourner le signe d'un nombre

abs(); ne me retournera pas un négatif lorsque l'entrée est positive, correct? J'ai besoin du signe opposé.

+0

'Math.Abs' ....? – kennytm

+2

Votre question à propos de .net ou de la bibliothèque C++ Standard? –

+1

Quel est le problème avec la multiplication par -1? Arithmétique de base. – Oded

Répondre

8

il suffit de multiplier par -1:

double d = 1.2345; 
double opposite = d * -1; 
+0

wow @ comment la réponse la plus simple résout Je construisais des analyseurs de chaîne pour ajouter ou supprimer le - – Smoka

+5

Pourquoi pas 'opposite = -d;'? – GManNickG

1

Consultez Math.Abs (réponse à la question précédente).

utiliser le signe négatif:

var answer = -amount; 
-1

en C++, simplement abs(x) qui est en math.h
Ceci est la fonction Absolute Value.

+1

En fait, abs est défini dans '' et est surchargé pour 'int' et' double'. Dans '' vous trouverez 'fabs', qui est surchargé pour' float', 'double' et' long double'. – GManNickG

11

Mec. Moins.

double d = 1.1234; 
double opposite = -d; 
1

Ceci est trop évident:

n = -n 

Vous devez utiliser:

n = ~--n; 

..ou, si vous aimez le OU au niveau du bit, utilisez:

n = (0xffffffff^n) + 1; 

... si ce +1 est trop évident pour vous, c'est un pari sûr:

n ^= 0xffffffff; 
int m; 
for (m = 1; m != 0 && ((n & m) != 0); m <<= 1); 
n |= m; 
if (m == 0) n = m; 
else for (m >>= 1; m != 0; n ^= m, m >>=1); 

... il y a aussi la possibilité pour les personnes qui veulent assurer qu'aucun de leur puissance de traitement reste inutilisée:

public int invert(int n) { 
    Random r = new Random(); 
    while (true) { 
    int s = r.nextInt(); 
    if ((s + n) == 0) { 
     return s; 
    } 
    } 
} 
+0

+1 pour les mathématiques avancées. – Hut8