C++ で 2 つの整数の間で mod 操作を実行するにはどうすればよいですか?
6 に答える
C++ には%、時折、誤解を招くように「モジュラス」演算子と呼ばれる演算子があります。特に、STLにはヘッダーにmodulus<>ファンクターがあります。<functional>これは数学的モジュラス演算子ではありません。覚えておいてください。モジュラス算術では、定義により、 の任意の値および の任意の正の値a mod bに対して非負の値に評価されるためです。C++ では、引数のいずれかが負の場合、結果の符号は実装定義です。したがって、演算子を剰余演算子と呼ぶ方が適切です。aba % 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;