Existe-t-il une fonction Java) permettant de convertir un int positif en un négatif et un int négatif en un positif?
Je recherche une fonction reverse
pour effectuer cette conversion:
-5 -> 5
5 -> -5
Qu'en est-il de x *= -1;
? Voulez-vous vraiment une fonction de bibliothèque pour cela?
x = -x;
C'est probablement la question la plus triviale que j'ai jamais vue.
... et pourquoi vous appelez cette fonction triviale 'reverse ()' est un autre mystère.
Il suffit d'utiliser l'opérateur unaire moins :
int x = 5;
...
x = -x; // Here's the mystery library function - the single character "-"
Java a deux moins opérateurs :
0 - x
), etCela compile et fonctionne comme prévu.
Une autre méthode (complément à 2):
public int reverse(int x){
x~=x;
x++;
return x;
}
Il effectue d'abord un complément (en complétant tous les bits), puis ajoute 1 à x. Cette méthode fait aussi le travail.
Remarque: cette méthode est écrite en Java et ressemblera à beaucoup d’autres langages.
d'origine * = -1;
Une simple ligne de code, l’original est tout ce que vous voulez.
Aucune fonction de ce type n'existe ou est possible d'écrire.
Le problème est le cas Edge Integer.MIN_VALUE (-2,147,483,648 = 0x80000000), appliquez chacune des trois méthodes ci-dessus et vous obtenez la même valeur. Cela est dû à la représentation des nombres entiers et au nombre entier maximum possible Integer.MAX_VALUE (-2,147,483,647 = 0x7fffffff), ce qui correspond à un moins ce que devrait être -Integer.MIN_VALUE.
Nécromancie ici.
Évidemment, x *= -1;
est beaucoup trop simple.
Au lieu de cela, nous pourrions utiliser un complément binaire trivial:
number = ~(number - 1) ;
Comme ça:
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);
}
}
De cette façon, nous pouvons nous assurer que les programmeurs médiocres ne comprennent pas ce qui se passe;)
Oui, comme l'a déjà noté Jeffrey Bosboom (Désolé Jeffrey, je n'avais pas remarqué votre commentaire lorsque j'ai répondu), il existe une telle fonction: Math.negateExact .
et
Non, vous ne devriez probablement pas l'utiliser. Non, sauf si vous avez besoin d'un référence de la méthode .
Vous pouvez utiliser l'opérateur moins ou Math.abs. Celles-ci fonctionnent pour tous les entiers négatifs SAUF pour Integer.MIN_VALUE! Si vous faites 0 - MIN_VALUE, la réponse est toujours MIN_VALUE.
Vous pouvez utiliser Math:
int x = Math.abs(-5);