
C言語基礎|加減乗除の演算子
計算を行うための基本的な道具
これまでのプログラムでは、
足したり、引いたり、掛けたり、割ったりといった計算を、何気なく行ってきました。
C言語では、こうした計算を行うために、
- 記号
- ルール
がきちんと決められています。
計算を指示する記号のことを 演算子 と呼び、
この記事では、最も基本となる 加減乗除の演算子 を整理して学習します。

乗除演算子と加減演算子
C言語で使われる基本的な計算用の演算子は、大きく次の2種類に分けられます。
- 乗除演算子(multiplicative operator)
- 加減演算子(additive operator)
まずは、それぞれを表で確認してみましょう。
乗除演算子
| 演算子 | 書式 | 意味 |
|---|---|---|
| * | a * b | a と b の積 |
| / | a / b | a を b で割った商(整数どうしの場合は小数点以下を切り捨て) |
| % | a % b | a を b で割った剰余(a と b は整数でなければならない) |
加減演算子
| 演算子 | 書式 | 意味 |
|---|---|---|
| + | a + b | a と b の和 |
| - | a - b | a から b を引いた値 |
これらはすべて 2項演算子 であり、
左右に二つのオペランドを取って計算を行います。
除算には2種類ある
C言語では、「割り算」を行う演算子が2つあります。
- / 演算子:商を求める。
- % 演算子:剰余(あまり)を求める。
同じ割り算でも、役割はまったく異なります。
/ 演算子:商を求める
/ 演算子は、割り算の 商 を求めます。
特に注意が必要なのは、整数どうしの割り算 です。
| 式 | 結果 |
|---|---|
| 5 / 3 | 1 |
| 3 / 5 | 0 |
整数どうしの場合、小数点以下は切り捨てられます。
これはエラーではなく、C言語の仕様どおりの動作です。
% 演算子:剰余を求める
% 演算子は、割り算の 余り を求めます。
| 式 | 結果 |
|---|---|
| 5 % 3 | 2 |
| 3 % 5 | 3 |
なお、% 演算子のオペランドは 両方とも整数 でなければなりません。
printf 関数で % を表示する方法
ここで一つ、表示に関する重要な注意点があります。
printf 関数では、% は 変換指定の開始文字 として使われます。
そのため、画面に % をそのまま表示したい場合は、次のように書きます。
printf("%%\n"); // % を1文字表示一方、書式指定を持たない puts 関数では、
そのまま % を書くことができます。
puts("%"); // % を1文字表示この違いは、printf と puts の性質の違いによるものです。
剰余を使った実用的な例
% 演算子は、実際のプログラムでとてもよく使われます。
その代表例が「最下位桁を取り出す」処理です。
サンプルプログラム:最下位桁を求める
プロジェクト名:chap2-2-1 ソースファイル名:chap2-2-1.c
Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。
// 入力された整数の一番右の数字を表示する
#include <stdio.h>
int main(void)
{
int value;
printf("整数を入力してください:");
scanf("%d", &value);
printf("一番右の数字は%dです。\n", value % 10);
return 0;
}実行例
整数を入力してください:1090
一番右の数字は0です。
整数を入力してください:1090
一番右の数字は0です。なぜこれで最下位桁が分かるのか
10 で割ったときの剰余は、
必ず 最下位の1桁 になります。
| 数値 | 割り算 | 剰余 |
|---|---|---|
| 1357 | 1357 ÷ 10 | 7 |
| 1780 | 1780 ÷ 10 | 0 |
この性質は、後の章で学ぶ
- 桁ごとの処理
- 数値の分解
でも頻繁に利用されます。
除算と剰余の正式な定義
標準Cでは、除算と剰余の結果は次のように定義されています。
- / 演算子
代数的な商から小数部を切り捨てた値 - % 演算子
(a / b) * b + a % b が a と等しくなる値
この定義により、オペランドが負の場合でも結果が決まります。
符号を含む演算結果の例
| x / y | x % y |
|---|---|
| 22 / 5 = 4 | 22 % 5 = 2 |
| -22 / -5 = 4 | -22 % -5 = -2 |
| 22 / -5 = -4 | 22 % -5 = 2 |
| -22 / 5 = -4 | -22 % 5 = -2 |
なお、第2オペランドが 0 の場合の動作は、言語では定義されていません。
多くの環境では、実行時エラーとなりプログラムが中断します。
演習問題
演習 2-1
二つの整数値を読み込み、
前者の値が後者の何パーセントに相当するかを表示するプログラムを作成せよ。
解答例
プロジェクト名:chap2-2-2 ソースファイル名:chap2-2-2.c
Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。
#include <stdio.h>
int main(void)
{
int x, y;
puts("二つの整数を入力してください。");
printf("整数 x:"); scanf("%d", &x);
printf("整数 y:"); scanf("%d", &y);
printf("x の値は y の %d%% です。\n", x * 100 / y);
return 0;
}この記事の内容を理解できれば、
C言語の計算処理の土台はほぼ完成 です 👍
次は、演算の優先順位や型との関係を見ていくと、
「なぜその結果になるのか」が、さらにクリアになります。
