È possibile convertire un numero negativo a positivo in questo modo:Convertire un numero positivo a negativo in C#
int myInt = System.Math.Abs(-5);
Esiste un metodo equivalente per fare un numero positivo negativo?
È possibile convertire un numero negativo a positivo in questo modo:Convertire un numero positivo a negativo in C#
int myInt = System.Math.Abs(-5);
Esiste un metodo equivalente per fare un numero positivo negativo?
Come su
myInt = myInt * -1
Buona soluzione. :) –
Grazie, dovrei sapere, è venerdì pomeriggio per te ... zzzz –
Questa soluzione è ottima perché può anche convertire il negativo in positivo! Genio! –
int negInt = 0 - myInt;
O garantito come negativo.
int negInt = -System.Math.Abs(someInt);
int myNegInt = System.Math.Abs(myNumber) * (-1);
+1 per ricordare che se è già un negativo avresti l'effetto opposto. La tua risposta è l'unica che darebbe sempre un numero negativo indipendentemente dal fatto che myNumber sia positivo o negativo. – David
Solo 26 voti per questa risposta? Ci sono utenti SO che pensano che questo non funzionerebbe? – MusiGenesis
30 voti in su? Già la domanda è così semplice. E questa risposta troppo complicata (-System.Math.Abs (myNumber) farebbe anche) ottiene 30 voti in più ???? – mmmmmmmm
Il modo più semplice:
myInt *= -1;
Stava per pubblicare lo stesso, tutti dovrebbero mostrare * = un po 'di amore :-) –
moltiplicarlo per -1.
int negInt = -System.Math.Abs(myInt)
Più bello di "* -1". –
Sì, perché la negazione è l'obiettivo, quindi un meno unario è l'operatore giusto. D'altra parte, moltiplicando per uno negativo è solo un trucco per negare un valore. –
Un trucco? Chi stai prendendo in giro? – Shog9
int myInt = - System.Math.Abs(-5);
EDIT: Questo è sbagliato per gli ingressi positivo ... feci errore di dimenticare che il resto dei bit -x (valore 2s-complemento) sono il 'opposto' del valore d' + x, non lo stesso. COSÌ semplicemente cambiando il bit del segno NON funzionerà per numeri positivi.
Lascio questo qui per a per scopi ...
O il modo ingannevole (credo) ...
int y = x | ~ Int.MaxValue;
cause int.MaxValue is 0111 1111 1111 1111 1111 1111 1111 1111
così
~int.MaxValue is 1000 0000 0000 0000 0000 0000 0000 0000
e quindi ogni int32 OR ad che metterà un 1 nel bit di segno, (rendendolo negativo), e lasciare tutti gli altri bit uguali ...
EDIT: in realtà, dato che il 1000 0000 0000 0000 0000 0000 0000 0000 è in realtà il MinValue, questo dovrebbe funzionare anche:
int y = x | int.MinValue; // or, to do it to itself,
x |= int.MinValue;
Quindi, zero negativo è uguale a int.MinValue? – recursive
No, nel complemento a due, non c'è zero negativo. tutti sono negativi 1. A Signed 8Bit Int: 10000000 è -128 –
+1 perché nessuno merita di essere downvoted per rispondere a una domanda del tipo "quale lettera viene dopo A ma prima di C?" – MusiGenesis
Per passare il segno di un numero intero, è sufficiente utilizzare l'operatore segno :
myInt = -myInt;
Per rendere più negativo a prescindere se il valore originale è negativo o no, per la prima volta utilizza il metodo Abs:
myInt = -Math.Abs(myInt);
Solo per divertimento:
int negativeInt = int.Parse(String.Format("{0}{1}",
"-", positiveInt.ToString()));
Aggiornamento: la bellezza di questo approccio è che si può facilmente refactoring in un generatore di eccezione:
int negativeInt = int.Parse(String.Format("{0}{1}",
"thisisthedumbestquestioninstackoverflowhistory", positiveInt.ToString()));
Vostro diritto: è più facile chiedere che pensare, ecco perché appaiono domande come questa. Ma il vero problema è che ci sono persone che ricevono molta reputazione rispondendo a domande come questa. Dall'altra parte ci sono persone che si rompono il cervello per risolvere problemi reali e ricevere solo un voto perché nessuno può capire cosa stanno risolvendo. Interessante no? – backslash17
@ backslash17: sono totalmente d'accordo. Ci sono molti molti esempi di questo fenomeno su StackOverflow, ma questa domanda è sicuramente la più ridicola di tutte. Voglio dire, "come si fa a rendere un numero positivo negativo?", E le persone in realtà stanno discutendo su questo? Sei serio? – MusiGenesis
@ backslash17 - Sì! –
long negativeNumber = (long)positiveInt - (long)(int.MaxValue + 1);
Nessuno ha detto che doveva essere qualsiasi particolare numero negativo .
Um, se non ti interessa che debba essere un numero negativo * particolare *, puoi semplificarlo a "long negativeNumber = -1;" – Beska
Eh, basta renderlo un byte. :) – MusiGenesis
Un byte non può essere negativo ... – Guffa
Solo per più divertente:
int myInt = Math.Min(hisInt, -hisInt);
int myInt = -(int)Math.Sqrt(Math.Pow(Math.Sin(1), 2) + Math.Pow(Math.Cos(-1), 2))
* Math.Abs(hisInt);
Troppo rischioso, IMHO. Cosa succede se la definizione di un cerchio cambia? – MusiGenesis
OK, come va su Math.Sin (-Math.Pi/2) * ... –
nota a tutti coloro che ha risposto con
- Math.Abs(myInteger)
o
0 - Math.Abs(myInteger)
o
Math.Abs(myInteger) * -1
come modo per mantenere negativi i numeri negativi e trasformare quelli positivi in negativo.
Questo approccio ha un solo difetto. Non funziona per tutti gli interi. L'intervallo del tipo Int32
è da "-2 " a "2 - 1." Significa che c'è un altro numero "negativo". Di conseguenza, Math.Abs(int.MinValue)
genera uno OverflowException
.
Il modo corretto è quello di utilizzare le istruzioni condizionali:
int neg = n < 0 ? n : -n;
questo approccio funziona per "tutti" i numeri interi.
Ti lancerò il punto per la correttezza, ma qualsiasi codice che dipende da nessuno che prenda Abs di MinValue è fragile. –
Steven: A volte, stai risolvendo un problema (come 'Abs') che non può funzionare per' int.MinValue' (assumendo il tipo di ritorno 'int'.) In tal caso, è completamente OK lanciare un'eccezione. Tuttavia, questo problema specifico ha un risultato "valido" per 'int.MinValue' ma genera un'eccezione se si prende la route' Abs'. –
ma x | = int.MinValue funziona per tutti gli interi, incluso MinValue ... –
Anche se sono molto in ritardo per la festa qui, ho intenzione di suonare con alcuni trucchi utili dai miei giorni di hardware. Tutti questi presuppongono la rappresentazione di complimenti di 2 per i numeri firmati.
int negate = ~i+1;
int positiveMagnitude = (i^(i>>31)) - (i>>31);
int negativeMagnitude = (i>>31) - (i^(i>>31));
X=*-1
potrebbe non funzionare su tutti i compilatori ...dal momento che legge un 'moltiplicare' 'SOTTRAI' 1 al posto di NEGATIVO Il meglio alt è X=(0-X)
, [che è DIFF DAL X-=X
]
... intendi X * = - 1? – kokbira
Usa binario e per rimuovere l'ultimo pezzo che è responsabile per il segno negativo.
Oppure utilizzare binario o aggiungere un segno a un tipo di dati.
Questa solf potrebbe sembrare assurda e incompleta, ma posso garantire che questo è il metodo più veloce.
Se non sperimentare con quello che ho scritto questo post può sembrare schifo: D
Ad esempio per int:
int è 32 bit tipo di dati così l'ultimo bit (32 ° uno) determina il segno .
E con un valore che ha 0 nel posto 32 e si riposa 1. Converte il no negativo in + ve.
Per tutto il contrario o con un valore di 1 al posto 32 ° e riposare 0.
Il modo più semplice a = -a farà il favore
Io uso myInt = -myInt;
semplice e facile
Se si vuole avere solo positiva
myInt = myInt>0 ? myInt : -myInt;
Stavo cercando questa risposta in una situazione leggermente diversa come l'OP. Voglio avere 2 valori negati a vicenda se uno di questi è -5 l'altro dovrebbe essere 5, quindi questa è la mia soluzione migliore = D –
Conversione di un numero da positivo a negativo o da negativo a positivo:
public static decimal Reverse(this decimal source)
{
return source * decimal.MinusOne;
}
'myInt | = -1;' lol –
http://en.wikipedia.org/wiki/Additive_inverse –
280Z28: Questo è equivalente a mioInt = -1. – recursive