0

以下で -2 ではなく 2 になるのはなぜですか?

System.out.println(11%-3);

それを考慮して:

System.out.println(-11%3);

-2.. を返します。

前もって感謝します。

4

5 に答える 5

3

JLSの引用:

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


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

(私のものを強調してください。)

また、さまざまなプログラミング言語でのモジュロ演算子については、モジュロ演算を参照してください。

于 2013-08-29T07:48:03.323 に答える
1

規則はJls 15.17.3 で指定されています。剰余演算子 % -

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

于 2013-08-29T07:50:07.693 に答える
0

結果の符号は被除数の符号と等しいためです。 http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.17.3

于 2013-08-29T07:53:28.177 に答える
0

まず、「remainder()」は次のことを意味します: a=b*c+r の場合、a,b,c,r は整数です。次に a%b = c

しかし、どのように c を選択すればよいかというと、プログラミング言語が異なれば実装も異なります。

C および Java では、残りは切り捨てとして計算されました。

-11% 3 = 3*(-3)+(-2) 11% (-3) = (-3)*(-3)+2

重要なポイントは、なぜ -3 を選択するのかということです。なぜなら:

切り捨て(-11/3)=切り捨て(-3.66)=-3

「truncate()」でint部分を0に近づける

Python などの他のプログラミング言語では、フロア除算を使用します。つまり、Python では: -11 % 3 = 3 * (floor(-11/3))+2

参照してください: http://python-history.blogspot.sg/2010/08/why-pythons-integer-division-floors.html

于 2013-08-29T08:19:38.267 に答える
-3

これは数学の問題です。

まず、-11%3 と 11%-3 は同じです。

2番目に、正の数が必要な場合は、「マイナス」を削除してください。11%3 または -11%-3 を試してください

于 2013-08-29T07:46:35.817 に答える