1. 導入:なぜモジュロ演算子が必要なのか?
C++でプログラムを書いていると、「2で割った余りが0なら偶数」「3回に1回だけ処理を実行したい」といった、周期的な動きや条件分岐が必要になる場面が多々あります。そんな時、割り算の余りを一瞬で計算してくれるのがモジュロ演算子(%)です。これを使えるようになると、プログラムの柔軟性が大きく向上します。
2. 基礎知識:モジュロ演算子とは?
モジュロ演算子(%)は、ある整数を別の整数で割った時の「余り」を求めるための演算子です。
・使用可能な型:整数型(int, long, shortなど)のみに使用できます。浮動小数点数(doubleやfloat)には使用できません。
・仕組み:例えば「5 % 2」であれば、5を2で割ると「商が2、余りが1」となるため、結果は「1」となります。
・注意点:0で割ることは数学的に定義されていないため、プログラムが強制終了する原因となります。必ず割る数(右辺)が0にならないように注意してください。
3. 実装と解決策
モジュロ演算子の主な活用シーンは「周期的な判定」です。例えば、値が特定の数で割り切れるかどうかを判定するには「変数 % 数 == 0」という式を使います。これにより、ループ処理の中で「特定のタイミングだけ何かをする」といった制御が非常に簡単になります。
4. サンプルプログラム
以下のコードをコピーして、実際にコンパイルして動作を確認してみてください。
include
int main() {
int target = 10;
// 基本的な使い方:余りの計算
int remainder = target % 3; // 10を3で割ると余りは1
std::cout << "10を3で割った余りは: " << remainder << std::endl;
// 応用:偶数か奇数かの判定
int num = 7;
if (num % 2 == 0) {
std::cout << num << " は偶数です。" << std::endl;
} else {
std::cout << num << " は奇数です。" << std::endl;
}
// 応用:周期的な処理(0から9まで3の倍数だけ表示)
std::cout << "3の倍数の表示: ";
for (int i = 1; i <= 10; i++) {
if (i % 3 == 0) {
std::cout << i << " ";
}
}
std::cout << std::endl;
return 0;
}
5. 応用・注意点
現場で活用する際のポイントとして、負の数の扱いには注意が必要です。C++11以降、負の数に対してモジュロ演算を行うと、結果も負になるか0になります(例: -5 % 2 は -1)。「常に正の余りが欲しい」という場合は、計算結果に割る数を足して調整するなどの工夫が必要です。また、競技プログラミングなどでは「大きな数の計算結果を10^9+7で割った余りを求める」といった用途でも頻出するため、この演算子を使いこなすことはC++エンジニアの第一歩と言えます。

コメント