web-dev-qa-db-fra.com

Java Fonction mathématique permettant de convertir un int positif en négatif et un négatif en positif?

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
41
zippy

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

197
FailedDev
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.

74
user207421

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 :

  • la version familière arithmétique (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.

46
Bohemian

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.

10
Shivanshu Goyal

d'origine * = -1;

Une simple ligne de code, l’original est tout ce que vous voulez.

7
K.D. Code

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.

6
Salix alba

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

4
Stefan Steiger

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 .

2
old grouch

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.

1
lovos

Vous pouvez utiliser Math:

int x = Math.abs(-5);
0
Thiago Araújo