計算するとJavaint i = -1 % 2
になります。-1
Pythonでは、1
の結果として取得し-1 % 2
ます。モジュロ関数を使用してJavaで同じ動作を実現するには、何をする必要がありますか?
質問する
182076 次
5 に答える
196
ここでの問題は、Pythonでは%演算子がモジュラスを返し、Javaでは余りを返すことです。これらの関数は正の引数に対して同じ値を与えますが、モジュラスは負の入力に対して常に正の結果を返しますが、余りは負の結果を与える可能性があります。この質問には、それに関するいくつかの詳細情報があります。
これを行うことにより、正の値を見つけることができます。
int i = (((-1 % 2) + 2) % 2)
またはこれ:
int i = -1 % 2;
if (i<0) i += 2;
(明らかに、-1または2は、分子または分母になりたいものであれば何でもかまいません)
于 2011-03-21T23:42:30.757 に答える
138
Java 8以降、 Math.floorMod()メソッドを使用できます。
Math.floorMod(-1, 2); //== 1
注:モジュロ値(ここで2
は)が負の場合、すべての出力値も負になります。:)
于 2015-06-30T13:53:02.370 に答える
2
必要なn % m
場合:
int i = (n < 0) ? (m - (abs(n) % m) ) %m : (n % m);
数学的説明:
n = -1 * abs(n)
-> n % m = (-1 * abs(n) ) % m
-> (-1 * (abs(n) % m) ) % m
-> m - (abs(n) % m))
于 2011-03-21T23:50:11.997 に答える
2
if b > 0:
int mod = (mod = a % b) < 0 ? a + b : a;
%
演算子を2回使用しません。
于 2017-01-08T15:05:07.723 に答える
0
モジュラスが2の累乗である場合、ビットマスクを使用できます。
int i = -1 & ~-2; // -1 MOD 2 is 1
比較すると、Pascal言語は2つの演算子を提供します。REMは分子の符号を取り(x REM y
はx - (x DIV y) * y
ここにx DIV y
ありますTRUNC(x / y)
)、MODは正の分母を必要とし、正の結果を返します。
于 2011-03-22T00:15:56.727 に答える