6日でできる 新C言語入門|代入演算子の基本

変数の値を入れる、増やす、減らす、更新する。
代入演算子を理解して、C言語の値の変化を読み解けるようになろう。

C言語でプログラムを書くとき、変数に値を入れる操作はとてもよく使います。この操作を代入と呼びます。代入は、単に最初の値を入れるだけでなく、計算結果を保存したり、変数の値を更新したり、繰り返し処理の中で値を増減させたりするときにも使います。

C言語では、代入に=を使います。ただし、C言語の=は、数学の等号とは意味が少し違います。数学では=は左右が等しいことを表しますが、C言語では右側の値や計算結果を左側の変数に入れるという意味になります。

たとえば、point = 10;と書くと、pointという変数に10を入れるという意味です。また、point = point + 5;と書くと、現在のpointの値に5を足し、その結果をもう一度pointに入れるという意味になります。

このように、変数自身の値を使って新しい値に更新する処理は、C言語ではとてもよく登場します。さらに、point = point + 5;のような書き方は、point += 5;のように代入演算子を使って短く書くこともできます。

この記事では、通常の代入、計算式の代入、自分自身の値を使った更新、+=や-=などの代入演算子、実際の使いどころについて、サンプルプログラムを使いながら分かりやすく解説していきます。

代入は右側の値を左側の変数に入れる操作

C言語の代入は、右辺の値や計算結果を左辺の変数に保存する操作です。右辺とは=の右側、左辺とは=の左側のことです。

たとえば、num = 10;では、右側の10を左側のnumに入れます。すでにnumに別の値が入っている場合でも、新しい値で上書きされます。

書き方意味
num = 10;numに10を代入する
num = 20;numの値を20に更新する
b = a;aの値をbに代入する
total = price * count;price * countの計算結果をtotalに代入する

ここで大切なのは、代入は値の保存や更新を行う操作だという点です。変数は値を入れておく箱のようなものなので、代入によって箱の中身を入れ替えることができます。

C言語では、変数に値を入れないまま使うと、意図しない結果になることがあります。そのため、変数を使う前には初期化や代入によって値を入れておくことが大切です。

図:代入は右の値を左の変数へ入れる

この図から分かること

この図から分かるのは、C言語の=が左右の値が等しいことを表す記号ではなく、右側の値を左側の変数に入れるための記号だという点です。

num = 10;なら10をnumに入れ、total = price * count;ならprice * countの計算結果をtotalに入れます。代入の向きを理解しておくと、変数の値がどのように変わるのかを追いやすくなります。

通常の代入と再代入

変数には、あとから別の値を入れ直すことができます。これを再代入と考えると分かりやすいです。

たとえば、最初にnumに10を入れ、そのあとnumに20を入れると、numの中身は20に変わります。前に入っていた10は上書きされます。

処理変数の状態
int num;numという整数型の変数を用意する
num = 10;numに10が入る
num = 20;numの値が20に更新される

変数は、プログラムの実行中に値を変えられるため、計算結果や状態の変化を表すのに向いています。

たとえば、得点を増やす、在庫数を減らす、合計金額を更新する、残り時間を減らす、といった処理では、変数の値を何度も更新します。

他の変数や計算式の結果も代入できる

代入できるのは、直接書いた数値だけではありません。他の変数の値や、計算式の結果も代入できます。

書き方意味
b = a;aに入っている値をbに代入する
sum = a + b;a + bの計算結果をsumに代入する
area = width * height;width * heightの計算結果をareaに代入する
rest = total % count;totalをcountで割った余りをrestに代入する

このように、代入は計算と組み合わせて使うことが多いです。計算結果を変数に保存しておくと、その値をあとから表示したり、別の処理で使ったりできます。

変数名を分かりやすくしておくと、代入文の意味も読み取りやすくなります。area = width * height;であれば、横幅と高さを掛けて面積を求めていることが自然に分かります。

自分自身の値を使って更新する

C言語では、変数の現在の値を使って新しい値を計算し、その結果を同じ変数へ代入することがよくあります。

たとえば、score = score + 10;という書き方は、現在のscoreに10を足して、その結果をもう一度scoreに入れるという意味です。

書き方意味
count = count + 1;countを1増やす
stock = stock - 2;stockを2減らす
total = total + price;totalにpriceを加える
point = point * 2;pointを2倍にする

このような処理は、プログラムの中でとてもよく使います。たとえば、繰り返し処理で回数を数えるとき、合計値を少しずつ増やすとき、在庫を減らすときなどです。

数学の感覚で見ると、count = count + 1;は不思議に感じるかもしれません。数学では左右が等しくないように見えるからです。しかし、C言語では右側を先に計算し、その結果を左側の変数に保存する処理なので問題ありません。

代入演算子とは

代入演算子は、自分自身の値を使った演算と代入をまとめて書くための記号です。

たとえば、count = count + 1;は、count += 1;と書けます。意味は同じですが、代入演算子を使うと短く書けます。

代入演算子使用例同じ意味
+=a += 2;a = a + 2;
-=b -= 3;b = b - 3;
*=c *= 4;c = c * 4;
/=d /= 5;d = d / 5;
%=e %= 2;e = e % 2;

代入演算子は、変数の値を更新する意図がはっきりしているときに便利です。特に、合計を増やす、在庫を減らす、値を倍にする、余りを求めて保存する、といった場面でよく使われます。

ただし、初心者のうちは、まずa = a + 2;のような基本形を理解してから、a += 2;を使うと安心です。意味を分からずに短い書き方だけ覚えるより、元の計算の流れを理解しておくことが大切です。

図:通常の代入と代入演算子の対応

この図から分かること

この図から分かるのは、代入演算子が通常の代入と演算を短く書くための記法だという点です。

score = score + 5;とscore += 5;は同じ意味です。どちらも現在のscoreに5を足して、結果をscoreへ戻します。代入演算子を使うと、変数を更新していることが分かりやすくなり、コードもすっきりします。

代入演算子を比較するサンプルプログラム

通常の代入と代入演算子の動きを比べるために、同じ初期値から値を更新するプログラムを見てみましょう。

プロジェクト/ファイル名: Lesson17_1/main.c

#include <stdio.h>

int main(void) {
    // 通常の代入で更新する変数を用意する
    int point1 = 10, point2 = 10, point3 = 10, point4 = 10;

    // 代入演算子で更新する変数を用意する
    int score1 = 10, score2 = 10, score3 = 10, score4 = 10;

    // 通常の書き方で値を更新する
    point1 = point1 + 5;
    point2 = point2 - 3;
    point3 = point3 * 2;
    point4 = point4 / 5;

    // 代入演算子を使って値を更新する
    score1 += 5;
    score2 -= 3;
    score3 *= 2;
    score4 /= 5;

    // 通常の代入で更新した結果を表示する
    printf("通常の代入: point1=%d point2=%d point3=%d point4=%d\n",
           point1, point2, point3, point4);

    // 代入演算子で更新した結果を表示する
    printf("代入演算子: score1=%d score2=%d score3=%d score4=%d\n",
           score1, score2, score3, score4);

    return 0;
}

実行結果

通常の代入: point1=15 point2=7 point3=20 point4=2
代入演算子: score1=15 score2=7 score3=20 score4=2

このプログラムでは、point1からpoint4は通常の書き方で更新し、score1からscore4は代入演算子で更新しています。

結果を見ると、通常の代入と代入演算子で同じ値になっていることが分かります。つまり、point1 = point1 + 5;とscore1 += 5;は、書き方が違うだけで同じ考え方の処理です。

+=は値を加えて更新する

+=は、現在の値に右側の値を加えて、その結果を同じ変数に戻します。

書き方意味
total += 100;total = total + 100;
count += 1;count = count + 1;
score += bonus;score = score + bonus;

+=は、合計やカウントの処理でよく使われます。たとえば、複数の商品価格を合計したり、点数にボーナス点を加えたりする場面で便利です。

-=は値を引いて更新する

-=は、現在の値から右側の値を引いて、その結果を同じ変数に戻します。

書き方意味
stock -= 1;stock = stock - 1;
money -= 500;money = money - 500;
rest -= used;rest = rest - used;

在庫数を減らす、残り金額を減らす、残り回数を減らすといった処理に向いています。

*=は値を掛けて更新する

*=は、現在の値に右側の値を掛けて、その結果を同じ変数に戻します。

書き方意味
value *= 2;value = value * 2;
price *= 3;price = price * 3;
point *= rate;point = point * rate;

値を倍にしたいときや、倍率を使って値を更新したいときに使います。

/=は値を割って更新する

/=は、現在の値を右側の値で割り、その結果を同じ変数に戻します。

書き方意味
value /= 2;value = value / 2;
total /= count;total = total / count;
size /= 4;size = size / 4;

整数同士の割り算では、小数部分が切り捨てられる点に注意が必要です。たとえば、int型のvalueに5が入っているとき、value /= 2;を行うと結果は2になります。

%=は余りを求めて更新する

%=は、現在の値を右側の値で割った余りを、同じ変数に戻します。

書き方意味
value %= 2;value = value % 2;
number %= 10;number = number % 10;
index %= size;index = index % size;

余りを使う処理では、偶数や奇数の判定、一定範囲内で値を循環させる処理などが考えられます。

代入演算子を使った実践的なサンプルプログラム

次に、代入演算子を使って合計金額を増やしていくプログラムを見てみましょう。C言語では、日本語の変数名を使える場合もありますが、環境によって扱いに差が出ることがあります。学習では、半角英字の変数名に慣れておくと安心です。

プロジェクト/ファイル名: Lesson17_2/main.c

#include <stdio.h>

int main(void) {
    // 合計金額を0円で初期化する
    int total_price = 0;

    // 商品ごとの価格を合計金額に加算する
    total_price += 120;
    total_price += 250;
    total_price += 80;

    // 合計金額を表示する
    printf("合計金額は%d円です。\n", total_price);

    return 0;
}

実行結果

合計金額は450円です。

このプログラムでは、total_priceに商品の価格を順番に足しています。最初は0円で初期化し、120円、250円、80円を加えて、最終的に450円になります。

total_price = total_price + 120;と書くこともできますが、total_price += 120;と書くと、合計金額に120を加える処理であることが短く表現できます。

代入演算子は累積処理でよく使う

代入演算子は、累積処理で特によく使います。累積処理とは、値を少しずつ積み上げていく処理です。

たとえば、合計金額を増やす、得点を加算する、回数を数える、残りを減らす、といった処理が当てはまります。

処理の例書き方
合計金額に価格を加えるtotal_price += price;
得点にボーナス点を加えるscore += bonus;
在庫を1つ減らすstock -= 1;
値を2倍するvalue *= 2;
残りを半分にするrest /= 2;

代入演算子を使うと、変数の値を更新していることが見た目にも分かりやすくなります。繰り返し処理を学ぶと、さらに出番が増えます。

図:代入演算子は値の更新を短く表す

この図から分かること

この図から分かるのは、代入演算子が変数の値を段階的に更新する処理に向いているという点です。

total_priceが0円から始まり、+=120、+=250、+=80によって値が増えていきます。このように、現在の値をもとに新しい値へ更新する場面では、代入演算子を使うと処理の流れが分かりやすくなります。

=は等しいではなく代入と考える

C言語を学び始めたときにつまずきやすいのが、=の意味です。数学では=は等しいことを表します。しかしC言語では、=は右側の値を左側の変数に代入するという意味です。

書き方C言語での意味
a = 10;10をaに入れる
a = a + 1;aの現在値に1を足してaに戻す
total = price * count;price * countの結果をtotalに入れる

a = a + 1;は、数学として見ると不自然ですが、C言語ではよく使う処理です。右側のa + 1を先に計算し、その結果を左側のaに保存します。

この考え方に慣れると、代入演算子も理解しやすくなります。a += 1;は、a = a + 1;を短く書いたものです。

代入演算子を使うときの注意点

代入演算子は便利ですが、使い方にはいくつか注意点があります。

注意点内容
左側は変数にする10 += 2;のように値そのものは更新できない
型に注意するint型の割り算では小数部分が切り捨てられる
複雑にしすぎない読みにくい場合は通常の代入で書いてもよい
意味を理解して使う短く書けることより、処理の意味が分かることが大切
0除算に注意する/=や%=では右側が0にならないようにする

特に、/=と%=では右側の値が0にならないように注意が必要です。0で割ることはできないため、実行時エラーや異常な動作につながることがあります。

また、代入演算子を使えばいつでも読みやすくなるわけではありません。処理が複雑な場合は、あえて通常の代入で書いたほうが分かりやすいこともあります。

初心者は通常の書き方とセットで覚える

代入演算子を学ぶときは、必ず通常の書き方とセットで覚えると理解しやすくなります。

代入演算子通常の書き方
a += 2;a = a + 2;
b -= 3;b = b - 3;
c *= 4;c = c * 4;
d /= 5;d = d / 5;
e %= 2;e = e % 2;

この対応を理解しておけば、コードを読んだときに何をしているかがすぐに分かります。

最初は、a += 2;を見たら、頭の中でa = a + 2;に置き換えて考えるとよいでしょう。慣れてくると、+=を見ただけで、現在の値に加算して更新していると分かるようになります。

代入演算子を使うとコードがすっきりする

代入演算子のよいところは、値の更新を短く表現できることです。特に、同じ変数が左側と右側の両方に出てくる場合、代入演算子を使うと見た目がすっきりします。

通常の書き方代入演算子
total = total + price;total += price;
stock = stock - sold;stock -= sold;
point = point * rate;point *= rate;
count = count / 2;count /= 2;

ただし、短い書き方を使うことが目的ではありません。大切なのは、処理の意味が分かりやすいことです。代入演算子を使ったほうが自然に読める場合に使うとよいでしょう。

変数の更新を理解すると次の学習につながる

代入演算子は、今後学ぶ繰り返し処理や配列の集計でよく登場します。

たとえば、繰り返し処理ではcount += 1;のように回数を増やしたり、sum += value;のように合計を積み上げたりします。配列を学ぶと、複数の値を順番に取り出して合計する処理でも代入演算子が役立ちます。

今後の学習内容代入演算子が役立つ場面
繰り返し処理カウントを増やす
配列要素の合計を求める
条件分岐条件に応じて点数や在庫を更新する
関数計算結果を変数に保存する
ゲーム処理スコアや残り回数を更新する

代入演算子は、C言語の中では小さな記法に見えますが、値の変化を扱ううえでとても大切です。変数の値がいつ、どのように変わるのかを追えるようになると、プログラムの動きを理解しやすくなります。

代入演算子に慣れるための考え方

代入演算子に慣れるには、まず変数の値がどのように変化するかを紙に書いて追ってみるのがおすすめです。

たとえば、total_priceが0から始まり、+=120、+=250、+=80と進むと、値は0、120、370、450と変わっていきます。この変化を順番に追うことで、代入演算子の意味が自然に分かってきます。

プログラムを読むときは、変数の現在値を意識しましょう。代入演算子は、現在の値をもとに新しい値を作り、その結果で変数を更新する操作です。

C言語では、値の更新が多くの処理の基本になります。代入演算子を理解しておくと、繰り返し、集計、条件による値の変更など、次の学習内容にも進みやすくなります。