Esiste una funzione Java per convertire un positivo int in negativo e un negativo in positivo in positivo?
Sto cercando una funzione reverse
per eseguire questa conversione:
-5 -> 5 5 -> -5
Che dire di x *= -1;
? Vuoi davvero una funzione di libreria per questo?
x = -x;
Questa è probabilmente la domanda più banale che abbia mai visto da nessuna parte.
… e perché chiameresti questa banale funzione ‘reverse ()’ è un altro mistero.
Basta usare l’ operatore meno unario :
int x = 5; ... x = -x; // Here's the mystery library function - the single character "-"
Java ha due operatori meno:
0 - x
), e Questo compila e funziona come previsto.
Un altro metodo (complemento a 2):
public int reverse(int x){ x~=x; x++; return x; }
Fa prima il complemento a uno (completando tutti i bit) e poi aggiunge 1 a x. Questo metodo fa anche il lavoro.
Nota: questo metodo è scritto in Java e sarà simile a molte altre lingue
originale * = -1;
Semplice linea di codice, originale è tutto ciò che vuoi che sia.
Nessuna funzione del genere esiste o è ansible scrivere.
Il problema è il caso limite Integer.MIN_VALUE (-2,147,483,648 = 0x80000000) applica ciascuno dei tre metodi sopra riportati e ottieni lo stesso valore. Ciò è dovuto alla rappresentazione di interi e al numero intero massimo ansible Integer.MAX_VALUE (-2,147,483,647 = 0x7fffffff), che è uno in meno di quello che dovrebbe essere Intero.MIN_VALUE.
Negromante qui.
Ovviamente, x *= -1;
è troppo semplice
Invece, potremmo usare un banale complemento binario:
number = ~(number - 1) ;
Come questo:
import java.io.*; /* Name of the class has to be "Main" only if the class is public. */ class Ideone { public static void main (String[] args) throws java.lang.Exception { int iPositive = 15; int iNegative = ( ~(iPositive - 1) ) ; // Use extra brackets when using as C preprocessor directive ! ! !... System.out.println(iNegative); iPositive = ~(iNegative - 1) ; System.out.println(iPositive); iNegative = 0; iPositive = ~(iNegative - 1); System.out.println(iPositive); } }
In questo modo possiamo garantire che i programmatori mediocri non capiscano cosa sta succedendo;)
È ansible utilizzare l’operatore meno o Math.abs. Funzionano con tutti gli interi negativi ECCETTO per Integer.MIN_VALUE! Se fai 0 – MIN_VALUE la risposta è ancora MIN_VALUE.
Puoi usare la matematica:
int x = Math.abs(-5);
Sì, come già notato da Jeffrey Bosboom (mi dispiace Jeffrey, non avevo notato il tuo commento quando ho risposto), esiste una funzione del genere: Math.negateExact .
e
No, probabilmente non dovresti usarlo. A meno che non sia necessario un riferimento al metodo .