Funzione matematica Java per convertire da positivo int a negativo e negativo a positivo?

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:

  • la versione aritmetica familiare (es. 0 - x ), e
  • l’ operazione meno unaria (usata qui), che nega l’operando (singolo)

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 .