とは整数変数(n % m)
である式のすべての可能な結果は何ですか?n
m
と思っていまし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 の間になります