Java math fonction pour convertir int positif en négatif et négatif en positif?
Existe-t-il une fonction Java pour convertir un int positif en un int négatif et un int négatif en un int positif?
Je cherche une fonction reverse
pour effectuer cette conversion:
-5 -> 5
5 -> -5
10 answers
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 appelleriez cette fonction triviale 'reverse ()' est un autre mystère.
Utilisez simplement l'opérateur unaire moins :
int x = 5;
...
x = -x; // Here's the mystery library function - the single character "-"
Java a deux, moins les opérateurs:
- la version arithmétique familière (par exemple
0 - x
), et - l'opération unaire moins (utilisée ici), qui annule l'opérande (unique)
Cela compile et fonctionne comme prévu.
Une Autre méthode (complément de 2):
public int reverse(int x){
x~=x;
x++;
return x;
}
Il fait d'abord le complément d'un (en complétant tous les bits), puis ajoute 1 à x. Cette méthode fait également le travail.
Remarque: Cette méthode est écrit en Java, et sera similaire à beaucoup d'autres langues
Original *= -1;
Ligne de code simple, l'original est n'importe quel int que vous voulez qu'il soit.
Aucune fonction de ce type n'existe ou n'est possible d'écrire.
Le problème est l'entier de cas de bord.MIN_VALUE (-2,147,483,648 = 0x80000000) applique chacune des trois méthodes ci-dessus et vous obtenez la même valeur. Cela est dû à la représentation des entiers et à l'entier entier maximum possible.MAX_VALUE (-2,147,483,647 = 0x7fffffff)qui est un entier de moins.MIN_VALUE devrait être.
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 ceci:
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;)
Vous pouvez utiliser l'opérateur moins ou Math.ABS. Ceux-ci fonctionnent pour tous les entiers négatifs À l'EXCEPTION des entiers.MIN_VALUE! Si vous faites 0-MIN_VALUE, la réponse est toujours MIN_VALUE.
Oui, comme l'a déjà noté Jeffrey Bosboom (Désolé Jeffrey, je n'avais pas remarqué votre commentaire quand j'ai répondu), il existe une telle fonction: Math.negateExact .
Et
Non, vous ne devriez probablement pas l'utiliser. Pas sauf si vous avez besoin d'une référence de méthode .
Vous pouvez utiliser les Mathématiques:
int x = Math.abs(-5);