Java での負の数のモジュロ
Java では、モジュロ演算子または剰余演算子(%
)演算子を使用して除算した後、残りの 2つの数値を求めることができます。
A と B の 2つの数値が与えられているとします。ここで、A は被除数、B は除数です。A mod B を操作する場合、A を B で割ると剰余が得られます。
負の数を扱うと、間違った結果が得られることがあります。この記事では、Java で負の数の mod を見つけるさまざまな方法について説明します。
負の数があり、それらに%
演算子を使用すると、左のオペランドの符号に応じた結果が得られます。左のオペランドが正の場合、結果は正になり、左のオペランドが負の場合、結果は負になります。
上記の問題を解決するために、%
演算子、floorMod()
メソッド、および Math.abs()
メソッドを使用して、負の数の mod を見つけることができます。それぞれのアプローチについて 1つずつ説明していきましょう。
Java で%
演算子を使用して負の数の Mod を取得する
正のドメインに入るまで最初に mod 係数を追加し、次に%
演算子を呼び出すことで、負の数の mod を見つけることができます。このメソッドの助けを借りて、私たちは常に出力よりも大きい mod 係数を持っています。
それがどのように機能するかを理解するために、以下のコードを見てみましょう。
public class Main {
public static void main(String args[]) {
int x = -4;
int y = 3;
int res = x % y;
System.out.println("Mod value before operation = " + res);
while (x < 0) x += y;
int mod_res = x % y;
System.out.println("Mod value after operation = " + mod_res);
}
}
出力:
Mod value before operation = -1
Mod value after operation = 2
floormod()
メソッドを使用して負の数の Mod を取得する
floorMod()
メソッドを使用して、負の数の mod を見つけることもできます。このメソッドの助けを借りて、int 引数のフロアモジュラスを取得します。
floorMod()
関数の構文を見てみましょう。
構文:
floorMod(number, mod)
floorMod()
関数が負の整数で呼び出されると、mod ファクター記号を使用して出力が取得されます。それがどのように機能するかを理解するために、以下のコードを見てみましょう。
public class Main {
public static void main(String args[]) {
int x = -4;
int y = 3;
int res = x % y;
System.out.println("Mod value before operation = " + res);
int mod_res = Math.floorMod(
x, y); // This will have the output value as positive since the smod factor is positive
System.out.println("Mod value after operation having mod factor as positive = " + mod_res);
x = 4;
y = -3;
mod_res = Math.floorMod(
x, y); // This will have the output value as negative since the mod factor is negative
System.out.println("Mod value after operation having mod factor as negative = " + mod_res);
}
}
出力:
Mod value before operation = -1
Mod value after operation having mod factor as positive = 2
Mod value after operation having mod factor as negative = -2
Math.abs()
メソッドを使用して負の数の Mod を取得する
Math.abs()
メソッドを使用して、負の数の mod を見つけることもできます。
このタスクは、三項演算子を使用して実行します。この演算子は、数値が正か負かに関係なく、両方の場合の出力を生成します。
それがどのように機能するかを理解するために、以下のコードを見てみましょう。
public class Main {
public static void main(String args[]) {
int x = -4;
int y = 3;
int res = x % y;
System.out.println("Mod value before operation = " + res);
int mod_res = (x < 0) ? (y - (Math.abs(x) % y)) % y : (x % y);
System.out.println("Mod value after operation = " + mod_res);
}
}
出力:
Mod value before operation = -1
Mod value after operation = 2