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
Author: zippy, 2011-10-24

10 answers

Qu'en est-il de x *= -1;? Voulez-vous vraiment une fonction de bibliothèque pour cela?

 180
Author: FailedDev, 2011-10-23 23:07:48
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.

 61
Author: user207421, 2014-02-23 01:12:52

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.

 36
Author: Bohemian, 2014-07-20 23:44:15

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

 8
Author: Shivanshu Goyal, 2014-06-24 19:26:10

Original *= -1;

Ligne de code simple, l'original est n'importe quel int que vous voulez qu'il soit.

 5
Author: K.D. Code, 2015-12-25 17:17:56

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.

 4
Author: Salix alba, 2014-08-08 12:51:30

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;)

 2
Author: Stefan Steiger, 2018-07-30 10:38:29

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.

 1
Author: lovos, 2015-12-25 11:44:27

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 .

 0
Author: old grouch, 2017-05-23 12:02:36

Vous pouvez utiliser les Mathématiques:

int x = Math.abs(-5);
 0
Author: Thiago Araújo, 2017-11-10 18:22:44