
C言語のきほん|算術演算子の使い方
足し算・引き算だけじゃない。C言語の算術演算子を使いこなして、計算の落とし穴も一緒に防ごう。
C言語でプログラムらしい処理を作るうえで、いちばん基本になるのが「数値の計算」です。
その計算を支えるのが 算術演算子 です。
算術演算子を使うと、
- 合計や差を出す
- 掛け算や割り算をする
- 余りを使って偶数・奇数を判定する
- マイナスを付けたり符号を反転したりする
といった処理が書けるようになります。
ただし、算術演算は「書けたら終わり」ではなく、C言語特有の注意点もあります。
特に 整数の割り算 と ゼロ割、それから 演算の順序(優先順位) は、入門の段階でしっかり押さえておくと安心です。
ここでは、2項演算子(+ - * / %)と単項演算子(+ -)を中心に、使い方と注意点をやさしく丁寧に解説していきます。
算術演算子は2種類ある
算術演算子は、オペランドの数で大きく2種類に分かれます。
- 2項演算子:2つの値で計算する(加減乗除や余り)
- 単項演算子:1つの値を操作する(符号の反転など)
2項の算術演算子
2つの値を使って計算する演算子です。まずは一覧で押さえましょう。
| 演算子 | 演算 | 例 | 意味 |
|---|---|---|---|
| + | 加算 | a + b | a と b を足す |
| - | 減算 | a - b | a から b を引く |
| * | 乗算 | a * b | a に b を掛ける |
| / | 除算 | a / b | a を b で割る |
| % | 剰余 | a % b | a を b で割った余り |
- / は整数でも小数でも使えます。
% は 整数だけ に使えるのが大事なポイントです。
+(加算)
- は足し算です。整数にも小数にも使えます。
int result = a + b;
合計金額、合計点、合計時間など、使う場面はたくさんあります。
-(減算)
- は引き算です。整数にも小数にも使えます。
int result = a - b;
差分、残り、変化量を出すときに使います。
*(乗算)
- は掛け算です。整数にも小数にも使えます。
int result = a * b;
単価×個数、幅×高さなどの計算でよく使います。
/(除算)
/ は割り算です。整数にも小数にも使えます。
ただし、ここで重要な注意点があります。
整数同士の割り算は小数が切り捨てられる
たとえば 10 / 4 は本当は 2.5 ですが、int 同士だと結果は 2 になります。
int a = 10;
int b = 4;
int q = a / b; /* qは2 */
小数まで欲しいときは、どこかを double にする必要があります。
double q = (double)a / b; /* 2.5 */
この違いは、初心者が一番びっくりしやすいポイントなので、早めに体感しておくのがおすすめです。
%(剰余)
% は割り算の余りを求めます。
これは 整数でのみ使用可能 です。
int r = a % b;
余りは、偶数・奇数判定や、周期的な処理(7日周期、60秒で繰り上がりなど)でよく使います。
例として、偶数なら余りが0になります。
n % 2 == 0
単項の算術演算子
単項演算子は、1つの値に作用します。算術系では次の2つがあります。
| 演算子 | 演算 | 例 | 意味 |
|---|---|---|---|
| - | 符号反転 | -a | a の符号を反転する |
| + | 何もしない | +a | a をそのまま扱う |
単項 -(符号を反転する)
単項の - は、値の符号をひっくり返します。
- 10 → -10
- -5 → 5
int a = 10;
int b = -5;
int r1 = -a; /* -10 */
int r2 = -b; /* 5 */単項 +(ほぼ何もしない)
単項の + は値をそのまま扱います。
実務ではあまり出番はありませんが、「ここは正の値として扱っているよ」と明示したいときに使われることがあります。
int r = +a;
算術演算で気をつけたいこと
算術演算子自体はシンプルですが、実際のプログラムでは次の注意点がとても大事です。
ゼロ割に注意する
割り算で b が 0 だと、ゼロ割になります。
プログラムが停止したり、実行環境によっては例外になったりします。
a / b
a % b
この2つは、b が 0 のときに危険です。
入力を受け取るプログラムでは、割る前に 0 かどうかチェックする癖をつけると安心です。
整数の割り算は切り捨てになる
これは先ほどの通りですが、学習中に何度も出ます。
- 10 / 4 は 2
- 10 % 4 は 2(余り)
「小数が欲しいなら double へ」という考え方が大事です。
演算の順序(優先順位)に注意する
算術演算には優先順位があり、基本的に
- / % が先
- + - が後
です。
例として、
int result1 = 5 + 2 * 3;
は掛け算が先なので 11 になります。
一方で、
int result2 = (5 + 2) * 3;
は括弧が先なので 21 になります。
複雑になったら、括弧で意図を明確にするのが一番安全です。
サンプルプログラムで算術演算子を体験しよう
「整数の割り算が切り捨てになる」点と「ゼロ割チェック」も入れたサンプルプログラムです。
ファイル名:6_2_1.c
#include <stdio.h>
int main(void)
{
int a, b;
printf("2つの整数を入力してください\n");
printf("a > ");
scanf("%d", &a);
printf("b > ");
scanf("%d", &b);
printf("\n計算結果(2項演算子)\n");
printf("a + b = %d\n", a + b);
printf("a - b = %d\n", a - b);
printf("a * b = %d\n", a * b);
/* ゼロ割を防ぐ */
if (b != 0) {
printf("a / b = %d\n", a / b);
printf("a %% b = %d\n", a % b);
/* 小数も見たい場合の例 */
printf("a / b を小数で見ると = %.2f\n", (double)a / b);
} else {
printf("b が 0 なので、割り算と余りは計算できません\n");
}
printf("\n計算結果(単項演算子)\n");
printf("-a = %d\n", -a);
printf("+b = %d\n", +b);
return 0;
}実行例(入力が a=10, b=4 の場合)
2つの整数を入力してください
a > 10
b > 4
計算結果(2項演算子)
a + b = 14
a - b = 6
a * b = 40
a / b = 2
a % b = 2
a / b を小数で見ると = 2.50
計算結果(単項演算子)
-a = -10
+b = 4サンプルプログラムの解説
% を表示したいときは %% を使う
printf の書式では、% は変換指定の始まりなので、% 自体を表示したいときは %% と書きます。
printf("a %% b = %d\n", a % b);これで a % b の計算結果が表示できます。
a / b と (double)a / b は意味が違う
printf("a / b = %d\n", a / b);
printf("a / b を小数で見ると = %.2f\n", (double)a / b);上は int の割り算なので切り捨て、下は double が混ざるので小数になります。
同じ a と b でも、型が変わると結果の見え方が変わるのがポイントです。
ゼロ割は先に防ぐ
if (b != 0) {
/* 割り算OK */
} else {
/* 0なので計算できない */
}入力を受け取るプログラムでは、これはかなり大事な安全対策です。
演算の順序は括弧で明確にする
算術演算は優先順位があるので、複雑な式は括弧で意図を見せるのがおすすめです。
- 5 + 2 * 3 は 11
- (5 + 2) * 3 は 21
「読む人にも自分にも優しいコード」にするために、括弧は遠慮なく使って大丈夫です。
