とは整数変数(n % m)である式のすべての可能な結果は何ですか?nm
と思っていまし0た(m-1)が不明です。
mが正の整数であると仮定すると、可能な値の範囲は-min(abs(n), m - 1)からmin(abs(n), m - 1)までです。
したがって、nがゼロまたは正で、それより大きい場合m(典型的なケース)、範囲は包括的0になります。m-1
nがゼロまたは負であり、その絶対値が より大きい場合、m範囲は-(m-1)からまでになります0。
いずれの場合も、nの絶対値が より低い場合はm、 by によって設定された上限が代わりに によってm-1設定されnます。つまり、nがゼロまたは正で 未満の場合m、範囲は0からnまで (両端を含む) になります。
の結果はn % m、]-m、+m[ の範囲になります。
理由: Java でのモジュロ演算子の定義は、次のようなものです。すべての int 値 n および m について、次のことが常に true でなければなりません: (n / m) xm + (n % m) == n。
ただし、n が負の場合(n / m) * mは常に n 以上であるn % mため、上記の式を満たすには負でなければなりません。
ルールは次のとおりです。剰余演算の結果 (ゼロでない場合) は常に左オペランドと同じ符号になります。
肯定的な n と m の例を見てみましょう。あなたの答えは正しいですが、いくつかのケースがあります...
-1%10=-1
-1%-10=-1
1%-10=1
1%10=1
正の % 正の戻り値0 to m-1
負 % n <= m の場合は `0 の間の負の戻り値、それ以外の場合は 0 から n+1 の間になります