3

Javaでx mod -3から負数を出したいです。例: 1 mod -3 = -2 または 2 mod -3 = -1

この問題の方法はありますか?

4

3 に答える 3

3

%Javaの演算子はモジュラス演算子ではなく、剰余です。(それらは同じものではありません)それはあなたが得ているさまざまな兆候を説明しています. 現在のJava 言語仕様、セクション§15.17.3 から:

二項 % 演算子は、暗黙の除算からオペランドの残りを生成すると言われています。左側のオペランドは被除数で、右側のオペランドは除数です。

C および C++ では、剰余演算子は整数オペランドのみを受け入れますが、Java プログラミング言語では、浮動小数点オペランドも受け入れます。

バイナリ数値昇格 (§5.6.2) 後の整数であるオペランドの剰余演算は、(a/b)*b+(a%b) が a に等しいような結果値を生成します。

この恒等式は、被除数がその型で可能な最大の大きさの負の整数で、除数が -1 (剰余が 0) であるという特別な場合でも保持されます。

この規則から、剰余演算の結果は、被除数が負の場合にのみ負になる可能性があり、被除数が正の場合にのみ正になる可能性があることがわかります。さらに、結果の大きさは常に除数の大きさよりも小さくなります。

于 2012-11-04T15:22:58.457 に答える
2

X mod -Y-X mod Y定義したように、答えを解いてから否定することで計算できます。

例: 1 mod -3-> -1 mod 3 = 2->-2

特に Java では、 を実行し-X % Y、ゼロでない場合は追加しY、答えを否定します。

public static int negativeMod(int x, int y) {
   if (y > 0) return x % y;

   int newAnswer = (-1 * x) % (-1 * y);
   if (newAnswer != 0) newAnswer -= y;

   return -1 * newAnswer;
}
于 2012-11-04T15:17:32.633 に答える
0

簡単だ。余りが 0 でない場合は、モジュラスを引きます。例 1 mod -3 の場合、1 - 3 は -2 であり、希望する答えです。これは、数学的恒等式 a == a - n (mod n) の単純な結果です。

于 2012-11-05T01:20:34.057 に答える