Menu
Coddy logo textTech

剰余演算子

CoddyのC++ジャーニー「基礎」セクションの一部 — レッスン 17/74。

剰余演算子 % は、除算の余りを返します。C++では、シンプルな構文で使用されます:

result = dividend % divisor;
  • dividend: 割られる数。
  • divisor: 割る数。
  • result: 除算の余り。

例えば:

result = 10 % 3;

ここでは、10を3で割っています。3は10の中に3回入り、余りは1になります。したがって、resultは1になります。

通常、剰余演算(modulo)は数値が偶数か奇数かを確認するために使用されます:

  • 数値が偶数の場合、2で割ると余りは0になります。
  • 数値が奇数の場合、2で割ると余りは1になります。

C++で浮動小数点数(double型)を扱う際、剰余演算子 % を直接使用することはできません。代わりに、<cmath> ライブラリの fmod() 関数を使用する必要があります。これは剰余演算子と同様に動作しますが、小数の精度を保持します。例えば:

#include <cmath>

double result = fmod(5.2, 2.0);
// resultは1.2です

仕組みは次の通りです。2.0は5.2の中に2回入り(4.0)、余りは1.2(5.2 - 4.0 = 1.2)となります。

別の例:

double result = fmod(7.8, 3.5);
// result は 0.8 です

除数が被除数よりも大きい場合、結果は被除数と等しくなります。これは %fmod() の両方に当てはまります。

5 % 10 = 5
3 % 7 = 3
fmod(2.5, 8.0) = 2.5

なぜでしょうか?除数は0回しか収まらないため、被除数全体が余りとなります。

challenge icon

チャレンジ

初心者

3つの変数、a (int)b (double)、および c (int) を、それぞれ 92.6、および 11 という値で初期化するコードを記述してください。

その後、以下の変数を初期化してください:

  • d (int)a2 で割った剰余(モジュロ)の結果を保持します 
  • e (int)a3 で割った剰余の結果を保持します
  • f (double)b1.5 で割った剰余の結果を保持します
  • g (double)b3.9 で割った剰余の結果を保持します
  • h (int)c10 で割った剰余の結果を保持します

結果を確認し、異なる被除数と除数が結果にどのように影響するかを見てみましょう。

チートシート

剰余演算子 % は、除算の余りを返します:

result = dividend % divisor;

例:

result = 10 % 3;  // 結果は 1

一般的なユースケース - 数値が偶数か奇数かを判定する:

  • 偶数: number % 2 == 0
  • 奇数: number % 2 == 1

浮動小数点数の場合は、<cmath>fmod() を使用します:

#include <cmath>

double result = fmod(5.2, 2.0);  // 結果は 1.2
double result2 = fmod(7.8, 3.5); // 結果2は 0.8

除数が被除数より大きい場合、結果は被除数と等しくなります。これは %fmod() の両方に当てはまります。

自分で試してみよう

#include <iostream>
#include <cmath>

int main() {
    // 以下にコードを入力してください
    
    
    // 以下の行は変更しないでください
    std::cout << "a = " << a << std::endl;
    std::cout << "b = " << b << std::endl;
    std::cout << "c = " << c << std::endl;
    std::cout << "d = " << d << std::endl;
    std::cout << "e = " << e << std::endl;
    std::cout << "f = " << f << std::endl;
    std::cout << "g = " << g << std::endl;
    std::cout << "h = " << h << std::endl;
    return 0;
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン