Java mathématiques de la fonction de convertir positif int négatif et négatif au positif?
Est-il un Java fonction pour convertir un positif int à un négatif et un négatif int positive?
Je suis à la recherche d'un reverse
fonction pour effectuer cette conversion:
-5 -> 5
5 -> -5
Vous devez vous connecter pour publier un commentaire.
Ce sujet
x *= -1;
? Voulez-vous vraiment une fonction de la bibliothèque pour cela?C'est probablement la plus triviale question que je n'ai jamais vu n'importe où.
... et pourquoi vous dirais que c'est trivial fonction "reverse ()" est un autre mystère.
x *= -1
volonté. A été un peu surpris quand j'ai découvert que ce qui est de savoir comment je suis tombé sur cette page 🙂 bien sûr vous pouvez lancer, mais j'ai été auto-génération de code où x peut être byte, short, int ou long...Suffit d'utiliser la unaire moins opérateur:
Java a deux moins les opérateurs:
0 - x
), etCette compile et fonctionne comme prévu.
Une autre méthode (complément de 2):
Il fait un complément d'abord (en complétant tous les bits), puis ajoute 1 à x. Cette méthode fait le travail aussi bien.
Remarque: Cette méthode est écrit en Java, et sera similaire à beaucoup d'autres langues
x = -x
. À partir d'un assemblage de point de vue,-x
est un simpleneg
enseignement, en~x
et++x
nécessite unnot
etadd
instruction.d'origine *= -1;
Simple ligne de code, d'origine est tout int vous voulez qu'il soit.
La fonction n'existe pas ou est possible d'écrire.
Le problème, c'est le cas de bord Entier.MIN_VALUE (-2,147,483,648 = 0x80000000) s'appliquent à chacune des trois méthodes ci-dessus et vous obtenez la même valeur. Cela est dû à la représentation des entiers et le maximum possible entier.MAX_VALUE (-2,147,483,647 = 0x7fffffff), qui est un de moins que d'un Entier.MIN_VALUE devrait être.
ArithmeticException
lors de la tentative de nier MIN_VALUE, plutôt que d'en silence le retour du mauvais résultat.Necromancing ici.
Évidemment,
x *= -1;
est beaucoup trop simple.Au lieu de cela, nous pourrions utiliser un trivial complément binaire:
Comme ceci:
De cette façon, nous pouvons assurer que médiocre, les programmeurs ne pas comprendre ce qu'il se passe 😉
Oui, comme l'a déjà noté par Jeffrey Bosboom (Désolé Jeffrey, je n'avais pas remarqué votre commentaire quand j'ai répondu), il y a une telle fonction: Les mathématiques.negateExact.
et
Non, vous ne devriez probablement pas l'utiliser. Non, sauf si vous avez besoin d'un méthode de référence.
Vous pouvez utiliser le moins de l'opérateur ou les Mathématiques.abs. Ces travaux, pour tous les entiers négatifs, SAUF pour Entier.MIN_VALUE!
Si vous n'0 - MIN_VALUE la réponse est encore MIN_VALUE.
Vous pouvez utiliser les Mathématiques:
5
en-5
?var = Math.abs(var) * -1;
Math.abs()
juste supprime tous les-
signe. Il n'a pas d'inverser le signe. Utilisation-x
oux * -1
à la place.