🖥️

【C言語超入門】 第05回 整数の四則演算

2024/12/25に公開

https://youtu.be/uM6E9K3tn-Q

四国めたん
\textcolor{pink}{四国めたん: }教師役ですわ

ずんだもん
\textcolor{lime}{ずんだもん: }生徒役なのだ

\footnotesize \textcolor{pink}{四国めたん:} 皆さん、こんにちは。四国めたんです

\footnotesize \textcolor{lime}{ずんだもん:} ずんだもんなのだ。こんにちはなのだ

\footnotesize \textcolor{pink}{四国めたん:} 今回もC言語のお勉強をしていきましょう

\footnotesize \textcolor{lime}{ずんだもん:} レッツゴーなのだ

\footnotesize \textcolor{pink}{四国めたん:} 第5回目の今回は 整数の四則演算 についてお話ししますわ

\footnotesize \textcolor{lime}{ずんだもん:} 小学校で習う加減乗除のことなのだ

\footnotesize \textcolor{pink}{四国めたん:} そうですわね

\footnotesize \textcolor{lime}{ずんだもん:} でも何で四則演算なのだ?

\footnotesize \textcolor{pink}{四国めたん:} コンピューターは日本語で 電子計算機 と呼ばれるように、計算するのが本来の機能ですから

\footnotesize \textcolor{pink}{四国めたん:} 四則演算は、そのなかでも基礎となる計算ですわね

\footnotesize \textcolor{lime}{ずんだもん:} りょうかいなのだ

整数の加減乗除を行おう

\footnotesize \textcolor{pink}{四国めたん:} では一番簡単なところで整数同士の四則演算を見て行きますわね

\footnotesize \textcolor{pink}{四国めたん:} 四則演算については、 + , - , * , / の、プログラミングでは 演算子 と呼ばれる4つの記号を用いますわ

\footnotesize \textcolor{lime}{ずんだもん:} ふむ、いつも使っている加減乗除の記号とは少し違うのだ

\footnotesize \textcolor{pink}{四国めたん:} はい、掛け算(×)と割り算(÷)の記号が違っていますわ

\footnotesize \textcolor{lime}{ずんだもん:} なる程なのだ

\footnotesize \textcolor{pink}{四国めたん:} ではさっそくプログラムを書いて実行してみましょう

#include <stdio.h>

void main() {
  int x = 2 + 1;
  printf("2+1の値は%dです。\n", x);
  x = 4 - 3;
  printf("4-3の値は%dです。\n", x);
  x = 6 * 5;
  printf("6*5の値は%dです。\n", x);
  x = 8 / 7;
  printf("8/7の値は%dです。\n", x);
}

四則演算の出力

\footnotesize \textcolor{lime}{ずんだもん:} 足し算や引き算、掛け算は期待どおりなのだ

\footnotesize \textcolor{lime}{ずんだもん:} でも割り算は整数部分の"1"が答えとなっているのだ

\footnotesize \textcolor{pink}{四国めたん:} はい、コンピューターの計算では整数どうしの四則演算は整数の答えとなりますわ

\footnotesize \textcolor{pink}{四国めたん:} 浮動小数点を交えた四則演算については次回に説明しますわね

\footnotesize \textcolor{lime}{ずんだもん:} りょうかいなのだ

負数の割り算もできます

\footnotesize \textcolor{pink}{四国めたん:} 負の整数を含む割り算についても少し確認しておきましょう

#include <stdio.h>

void main() {
  int x = 8 / 7;
  printf("8/7の値は%dです。\n", x);
  x = -8 / 7;
  printf("-8/7の値は%dです。\n", x);
  x = 8 / -7;
  printf("8/-7の値は%dです。\n", x);
  x = -8 / -7;
  printf("-8/-7の値は%dです。\n", x);
}

負数の割り算の出力

\footnotesize \textcolor{lime}{ずんだもん:} 期待通りの結果なのだ

\footnotesize \textcolor{pink}{四国めたん:} そうでなくては困りますわ

0による割り算ってできるの?

\footnotesize \textcolor{lime}{ずんだもん:} ちなみに0で割ったらどうなるのだ?

\footnotesize \textcolor{pink}{四国めたん:} 算数でも"0"で割ることはできませんが、C言語でどうなるかを見てみましょう

#include <stdio.h>

void main() {
  int x = 1 / 0;
  printf("1/0の値は%dです。\n", x);
}

除算エラー

\footnotesize \textcolor{lime}{ずんだもん:} 「除算、剰余演算が 0 で行われています」というエラーが発生したのだ

\footnotesize \textcolor{pink}{四国めたん:} C言語でも"0"で割ることは、出来ないのですわ

\footnotesize \textcolor{lime}{ずんだもん:} なっとくなのだ

整数の割り算の余りを取得しよう

\footnotesize \textcolor{pink}{四国めたん:} ところで先ほど割り算の余りは切り捨てと言いましたわね

\footnotesize \textcolor{lime}{ずんだもん:} そうなのだ

\footnotesize \textcolor{pink}{四国めたん:} その余りの部分を取得する演算子も存在しますわ

\footnotesize \textcolor{lime}{ずんだもん:} そうなのか?

\footnotesize \textcolor{pink}{四国めたん:} はい、"%"という演算子が割り当てられています

\footnotesize \textcolor{pink}{四国めたん:} さっそくプログラムを書いて実行してみましょう

#include <stdio.h>

void main() {
  int x = 8 % 7;
  printf("8%7の値は%dです。\n", x);
}

剰余算

\footnotesize \textcolor{lime}{ずんだもん:} あれ?「8の値は1です。」と表示されて"%7"が、抜けているのだ

\footnotesize \textcolor{pink}{四国めたん:} ワーニングも出ていますわね

printfのワーニング

\footnotesize \textcolor{pink}{四国めたん:} 実は文字列中の"%"は"%d"や"%f"などの 書式指定子 に使用されるので、そのままでは使えないのですわ

\footnotesize \textcolor{lime}{ずんだもん:} どうすれば良いのだ?

\footnotesize \textcolor{pink}{四国めたん:} "%"を記述する場合には"%%"と"%"を繰り返すのですわ

\footnotesize \textcolor{pink}{四国めたん:} 修正して実行してみましょう

#include <stdio.h>

void main() {
  int x = 8 % 7;
  printf("8%%7の値は%dです。\n", x);
}

剰余算2

\footnotesize \textcolor{lime}{ずんだもん:} 今度は「8%7の値は1です。」と表示されたのだ

\footnotesize \textcolor{pink}{四国めたん:} 割り算の 余り もしっかりと得ることが出来ましたわ

どの順番で演算されるの?

\footnotesize \textcolor{lime}{ずんだもん:} ところで2つ以上の演算がある場合は演算の順番はどのようになるのだ?

\footnotesize \textcolor{pink}{四国めたん:} ずんだもんさんは算数の演算の順番は覚えていらっしゃいますか?

\footnotesize \textcolor{lime}{ずんだもん:} 当然なのだ

\footnotesize \textcolor{lime}{ずんだもん:} まず括弧"()"があれば、その中を先に計算するのだ

\footnotesize \textcolor{lime}{ずんだもん:} 次に掛け算と割り算を左から計算するのだ

\footnotesize \textcolor{lime}{ずんだもん:} 最後に足し算と引き算を左から計算するのだ

\footnotesize \textcolor{pink}{四国めたん:} その通りですわ

\footnotesize \textcolor{pink}{四国めたん:} C言語でも同じ規則が適用されますわね

\footnotesize \textcolor{lime}{ずんだもん:} そうなのか

\footnotesize \textcolor{pink}{四国めたん:} とりあえずプログラムを書いて実行してみましょう

#include <stdio.h>

void main() {
  int x = 1 + 2 * 3;
  printf("1+2*3の値は%dです。\n", x);
  x = (1 + 2) * 3;
  printf("(1+2)*3の値は%dです。\n", x);
}

演算の順序

\footnotesize \textcolor{pink}{四国めたん:} 最初の1 + 2 * 3は掛け算が先に計算されますので"7"が答えとなりますわ

\footnotesize \textcolor{pink}{四国めたん:} 次の(1 + 2) * 3は括弧"()"内が先に計算されますので"9"が答えとなりますわね

\footnotesize \textcolor{lime}{ずんだもん:} なるほどなのだ

\footnotesize \textcolor{lime}{ずんだもん:} ところで割り算の余りの計算はどうなるのだ?

\footnotesize \textcolor{pink}{四国めたん:} 余りの計算は割り算と同じ扱いになりますわ

\footnotesize \textcolor{pink}{四国めたん:} ちなみに四則演算を含む演算子の計算の優先順位については「C言語 演算子 優先順位」のように検索すると出てきますわ

\footnotesize \textcolor{lime}{ずんだもん:} わかったのだ

演算子の優先順位

C言語における演算子は数が多く、その演算の順番は厳密に決まっています

演算子の優先順位

優先順位 演算子 操作の種類
1 [ ] ( ) . -> ++-- (後置) 添字, 関数, メンバ参照, 増分減分
2 sizeof & * + - ~ ! ++-- (前置) 単項, 増分減分
3 ( ) キャスト
4 * / % 乗法
5 + - 加法
6 << >> ビットごとのシフト
7 < > <= >= 関係
8 == != 等価比較
9 & ビットごとの AND
10 ^ ビットごとの排他的 OR
11 | ビットごとの包括的 OR
12 && 論理 AND
13 || 論理 OR
14 ? : 条件式
15 = *= /= %= += -= <<= >>= &= ^= |= 単純代入と複合代入
16 , 順次評価

なお優先順位1と3の"( )"については計算式を括って計算の優先順位を上げる括弧とは別です

計算式を括る括弧"( )"の優先順位は、どの演算子よりも高く設定されています

見慣れない演算子が多くありますが、おいおい勉強して行きましょう

まとめ

\footnotesize \textcolor{pink}{四国めたん:} お疲れさまでした

\footnotesize \textcolor{pink}{四国めたん:} 以上で 整数の四則演算 を終了しますわ

\footnotesize \textcolor{lime}{ずんだもん:} おつかれさまなのだ

\footnotesize \textcolor{pink}{四国めたん:} 整数の四則演算は小学校の算数レベルのお話なので、演算子さえ押さえておけば問題ないはずですわ

\footnotesize \textcolor{pink}{四国めたん:} ただ割り算に関しては、答えが整数で返ってくることを忘れがちですわ

\footnotesize \textcolor{pink}{四国めたん:} 複雑なプログラミングでは計算結果がおかしくなる原因となるので注意が必要ですわね

\footnotesize \textcolor{pink}{四国めたん:} 特に整数の割り算が絡む場合には他の演算子よりも注意が必要ですわ

\footnotesize \textcolor{lime}{ずんだもん:} 気を付けるのだ

Discussion