Existe-t-il une fonction Java permettant de convertir un int positif en négatif et un int négatif en positif ?
Je suis à la recherche d'un reverse
pour effectuer cette conversion :
-5 -> 5
5 -> -5
Existe-t-il une fonction Java permettant de convertir un int positif en négatif et un int négatif en positif ?
Je suis à la recherche d'un reverse
pour effectuer cette conversion :
-5 -> 5
5 -> -5
Pour moi, la mauvaise réponse a été acceptée. C'est une réponse valide, mais étant donné que le PO demande de changer le signe d'un int, donc il n'y a pas de souci avec le zéro négatif ou d'autres concepts, je suggérerais que x = -x est plus expressif (voir la réponse de EJP ci-dessous)...
Addendum au commentaire précédent : voir aussi la réponse de Bohème qui explique plus en détail l'opérateur unaire.
Cela ne fonctionne pas dans le cas où x = Integer.MIN_VALUE et échouera silencieusement*. Pour être sûr, vous devriez vérifier ce cas et lever une exception, ou utiliser la fonction de bibliothèque negateExact, qui fait exactement cela.
Notez cependant qu'il ne compilera pas si x est un short ou un byte, alors que x *= -1
volonté. J'ai été un peu surpris lorsque j'ai découvert cela et c'est ainsi que je suis tombé sur cette page :) Bien sûr, vous pouvez faire un casting, mais je générais automatiquement du code où x pouvait être byte, short, int ou long...
Il suffit d'utiliser le 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 fait d'abord un complément à un (en complétant tous les bits) et ajoute ensuite 1 à x. Cette méthode fait aussi bien l'affaire.
Note : Cette méthode est écrite en Java, et sera similaire à beaucoup d'autres langages.
Une telle fonction n'existe pas et il n'est pas possible de l'écrire.
Le problème est le cas limite 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 maximum possible d'entiers Integer.MAX_VALUE (-2 147 483 647 = 0x7fffffff) qui est inférieur d'une unité à ce que devrait être -Integer.MIN_VALUE.
Si vous souhaitez que votre code soit robuste face à ce cas de figure, Java 8 propose les fonctionnalités suivantes Math.negateExact qui lancera un ArithmeticException
en essayant de nier MIN_VALUE, plutôt que de renvoyer silencieusement le mauvais résultat.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
4 votes
En rapport : stackoverflow.com/questions/1348080/ y stackoverflow.com/questions/5213338/ y stackoverflow.com/questions/4866187/
0 votes
Int x = 5 ; x = -x ;