web-dev-qa-db-ja.com

Android:モジュロの演算子(%は負の数では機能しません)

やってみたら

int a=(-2)%6

4 の代わりに-2を取得します。

なぜ負の数でこのように動作するのですか?

8
Primož Kralj

%Javaで剰余演算を実行します。

適切な係数を取得するには、関数で剰余を使用できます。

三項演算子を使用してサイン修正を行うのが最短です。

private int mod(int x, int y)
{
    int result = x % y;
    return result < 0? result + y : result;
}

三項演算子が気に入らない人にとって、これは同等です:

private int mod(int x, int y)
{
    int result = x % y;
    if (result < 0)
        result += y;
    return result;
}
31
Don Roby

-2を6で割ると、余りとして-2が得られるからです。 %演算子は、以下のように余りを与えます。

int remainder = 7 % 3;  // will give 1
int remainder2 = 6 % 2; // will give 0

モジュロを取得するには:

    // gives m ( mod n )
public int modulo( int m, int n ){
    int mod =  m % n ;
    return ( mod < 0 ) ? mod + n : mod;
}
10
emin