web-dev-qa-db-ja.com

Java正のintを負に、負の値を正に変換する数学関数?

正の整数を負の整数に変換し、負の整数を正の整数に変換するJava関数はありますか?

この変換を実行するreverse関数を探しています。

-5  ->  5
 5  -> -5
41
zippy

x *= -1;?このためのライブラリ関数が本当に必要ですか?

197
FailedDev
x = -x;

これはおそらく私が今まで見た中で最も些細な質問です。

...そして、この些細な関数を 'reverse()'と呼ぶ理由は別の謎です。

74
user207421

単項マイナス演算子を使用するだけです:

int x = 5;
...
x = -x; // Here's the mystery library function - the single character "-"

Javaにはtwoマイナス 演算子 があります:

  • おなじみのarithmeticバージョン(例0 - x)、および
  • 単項マイナス演算(ここで使用)、(単一)オペランドを否定します

これはコンパイルされ、期待どおりに動作します。

46
Bohemian

別の方法(2の補数):

public int reverse(int x){
    x~=x;
    x++;
    return x;
}

最初に1の補数を実行し(すべてのビットを補う)、xに1を追加します。このメソッドも仕事をします。

注:このメソッドはJavaで記述されており、他の多くの言語に似ています。

10
Shivanshu Goyal

オリジナル* = -1;

シンプルなコード行、オリジナルはあなたが望む任意の整数です。

7
K.D. Code

そのような関数は存在しないか、書き込むことができません。

問題は、エッジの場合Integer.MIN_VALUE(-2,147,483,648 = 0x80000000)が上記の3つの方法のそれぞれを適用し、同じ値を取得することです。これは、整数の表現と、可能な最大の整数Integer.MAX_VALUE(-2,147,483,647 = 0x7fffffff)であり、これは-Integer.MIN_VALUEが1少ない必要があります。

6
Salix alba

ここでネクロマンシング。
明らかに、x *= -1;はあまりにも単純です。

代わりに、簡単なバイナリ補数を使用できます。

number = ~(number - 1) ;

このような:

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


    }
}

そうすれば、平凡なプログラマーが何が起こっているのか理解できないようにすることができます;)

4
Stefan Steiger

はい、すでに Jeffrey Bosboom (ごめんなさい、Jeffrey、答えたときにあなたのコメントに気付かなかった)で既に述べたように、そのような関数があります: Math.negateExact

そして

いいえ、おそらく使用しないでください。 メソッドリファレンス が必要な場合を除きます。

2
old grouch

マイナス演算子またはMath.absを使用できます。これらは、Integer.MIN_VALUEを除くすべての負の整数で機能します! 0-MIN_VALUEを実行すると、答えはMIN_VALUEのままです。

1
lovos

数学を使用できます:

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