C++ で 2 つの整数の間で mod 操作を実行するにはどうすればよいですか?
6 に答える
C++ には%
、時折、誤解を招くように「モジュラス」演算子と呼ばれる演算子があります。特に、STLにはヘッダーにmodulus<>
ファンクターがあります。<functional>
これは数学的モジュラス演算子ではありません。覚えておいてください。モジュラス算術では、定義により、 の任意の値および の任意の正の値a mod b
に対して非負の値に評価されるためです。C++ では、引数のいずれかが負の場合、結果の符号は実装定義です。したがって、演算子を剰余演算子と呼ぶ方が適切です。a
b
a % b
%
そうは言っても、本当に数学的モジュラス演算子が必要な場合は、それを行う関数を定義できます。
template<typename V>
V mod(const V& a, const V& b)
{
return (a % b + b) % b;
}
b
が正の値である限り、上記の関数を呼び出すと負でない結果が得られます。
C++ では、% 演算子を使用します
他の回答が述べているように、C++ % 演算子を使用できます。しかし、まだ誰も言及していないしわがあることに注意してください: 式では、が負のa % b
場合 はどうでしょうか? a
この演算の結果は正か負か? C++ 標準では、これを実装に任せています。したがって、負の入力を移植可能に処理したい場合は、おそらく のようなことをしてから、要件に合わせr = abs(a) % b
て の符号を修正する必要がありr
ます。
このように: x=y%z
double 変数を使用する場合は、使用する必要があります。
double x;
double y;
double result = fmod(x, y);
モジュラス%
演算子の使用:
int modulus_a_b = a % b;