C言語⑥(2025/05/28)

演算子

C言語には様々な演算子があり、主に以下のカテゴリーに分類されます。

1. 算術演算子(Arithmetic Operators)

演算子説明
+a + b加算
-a - b減算
*a * b乗算
/a / b除算
%a % b剰余(余りを求める)

2. 代入演算子(Assignment Operators)

演算子説明
=a = baにbを代入
+=a += 5a = a + 5 と同じ
-=a -= 2a = a - 2 と同じ
*=a *= 3a = a * 3 と同じ
/=a /= 4a = a / 4 と同じ
%=a %= 2a = a % 2 と同じ

3. 比較演算子(Comparison Operators)

演算子説明
==a == b等しいかどうか
!=a != b等しくないかどうか
>a > bより大きいか
<a < bより小さいか
>=a >= b以上か
<=a <= b以下か

4. 論理演算子(Logical Operators)

演算子説明
&&a && b両方が真なら真(AND)
||a || bどちらかが真なら真(OR)
!!a真偽を反転(NOT)

5. ビット演算子(Bitwise Operators)

演算子説明
&a & bAND(ビットごとの論理積)
|a | bOR(ビットごとの論理和)
^a ^ bXOR(ビットごとの排他的論理和)
~~aビットごとの反転
<<a << 2左シフト
>>a >> 2右シフト

6. インクリメント・デクリメント演算子

演算子説明
++a++1増やす(後置)
--a--1減らす(後置)
++++a1増やす(前置)
----a1減らす(前置)

7. 条件演算子(三項演算子)

result = (a > b) ? a : b;

これは if の簡易版で、「a > b が真なら a を、偽なら bresult に代入する」という意味になります。(by Copilot)


※“%”(余り)演算子について
・変数をカウンタとして利用する場合に、余りを使うと「カウントアップ⇒カウントリセット」ではなく「カウントアップ」処理だけで実装可能。0、1、2のカウントが必要な例↓

count = 0;
count++
a = count % 3

こうすると、余りは0、1、2を繰り返していくことになる。
商と併せて使うと、もっと細かにパターン分岐が可能。※こういった考え方をアルゴリズムという※

アルゴリズムは、問題を解決するための手順のことです。プログラミングでは、効率的にタスクを処理するためにアルゴリズムを使います。簡単にいうと、料理のレシピのようなものですね!🍳
アルゴリズムの基本
- 入力 → 何らかのデータを受け取る(例:数字や文字)
- 処理 → そのデータを計算や変換する
- 出力 → 最終的な結果を出す
例えば、「2つの数字を足す」アルゴリズムなら、
💡 入力: 3 と 5
🔄 処理: 3 + 5 を計算する
📤 出力: 8 を表示する
よく使われるアルゴリズム
- 探索(検索)アルゴリズム 🔍
→ 例えば、大量のデータから特定の値を探す
- 線形探索: データを順番に調べる
- 二分探索: データを半分に分けながら効率よく探す
- ソート(並び替え)アルゴリズム 🔢
→ 数字や文字を整理する方法
- バブルソート: 隣り合うデータを交換しながら並べ替える
- クイックソート: データを分割しながら高速に並び替える
- 再帰(繰り返し呼び出し)アルゴリズム 🔁
→ 自分自身を呼び出す関数で問題を分割して解く
- 例:「階乗(n!)」や「フィボナッチ数列」
アルゴリズムの考え方
プログラムを作るときは、「どんな問題を解決したいか」を考え、適切なアルゴリズムを選ぶのが大事です。例えば…
- 「一番速く検索したい!」 → 二分探索 を使う
- 「データをきれいに並べたい!」 → クイックソート が便利
- 「繰り返し計算したい!」 → 再帰 を使う
アルゴリズムはプログラミングの基礎なので、ぜひ楽しみながら学んでみてください!😃 気になるアルゴリズムがあれば詳しく説明しますよ。
(by Copilot)

代入演算子

“=”は、「等しい」ではなく「左に右の値を代入する」という意味の記号になる。

int a,b,c;
a = 2;
b = 3;
c = a + b; //cは5になる
a = 2;
a = a + 3;
⇒変数aの値に、3という値を足して、結果を変数aに戻す。

下記のような記述も可能。
a = 2;
a += 3;

どちらも結果は「5」となる。

インクリメントとデクリメント

++(インクリメント):値を1増やす
a = a + 1;
a += 1;
a++;
全て同じ意味。

--(デクリメント):値を1減らす
a = a - 1;
a -= 1;
a--;
全て同じ意味。

※前置と後置の違いについて
インクリメント(++)とデクリメント(--)の前置と後置の違いは、値の変化が適用されるタイミングにあります。
前置 (++x, --x)
- 変数の値がすぐに増減され、その変更後の値が返されます。
- 計算や代入時に、すぐに新しい値を使いたいときに便利。
int x = 5;
int y = ++x; // x は 6 に増加し、その 6 が y に代入される

printf("x = %d, y = %d\n", x, y); // 出力: x = 6, y = 6


後置 (x++, x--)
- 変数の値が元の値のまま返され、その後で増減されます。
- 一時的に元の値を使いたい場合に適しています。
int x = 5;
int y = x++; // x の元の値(5)が y に代入され、その後 x は 6 に増加

printf("x = %d, y = %d\n", x, y); // 出力: x = 6, y = 5



用途の違い
✅ 前置 (++x) は、変数の値をすぐに変更して計算に使いたいとき
✅ 後置 (x++) は、変数の元の値を使った計算をした後に変更したいとき
例えば、ループで使う場合:
for (int i = 0; i < 5; ++i) {  // 前置
    printf("%d ", i);
}


for (int i = 0; i < 5; i++) {  // 後置
    printf("%d ", i);
}

どちらも結果は同じですが、前置は速度的にわずかに効率が良いため、最適化する際に前置が選ばれることがあります。
わかりやすいでしょうか?😃 他にも気になるポイントがあればどうぞ

(by Copilot)

別例:

#include<stdio.h>

int main(void)
{
	int a = 0;
	while (true) {
		printf("a=%d\n", a);
		a++;
		if (a >= 5)break;
	}
	a = 0;
	while (true) {
		printf("a=%d\n",a);
		if (a++ >= 5)break;
	}

	return 0;
}

結果

a=0
a=1
a=2
a=3
a=4
a=0
a=1
a=2
a=3
a=4
a=5
	while (true) {
		printf("a=%d\n", a);
		a++;
		if (a >= 5)break;
	}

上のコードでは、a++で加算後にa >= 5 の比較が行われている為、4までしか表示されない。

while (true) {
    printf("a=%d\n",a);
    if (a++ >= 5)break;
}

上のコードでは、a >= 5 の比較後に a++ で加算が行われるため、もう1周ループして5まで表示される。

while (true) {
    printf("a=%d\n",a);
    if (++a >= 5)break;
}

上のコードでは ++a で加算後に a>= 5 の比較が行われるため、4までしか表示されない。

なお、VisualStudioでは「ステップ実行」という機能があり、1行ずつ結果を確認しながら処理を進めることができる。手順は以下。

Visual Studioではステップ実行を使ってコードを1行ずつ確認しながらデバッグできます!これを使えば、前置・後置の違いを実際に動かしながら理解しやすくなりますね。
ステップ実行の方法
- ブレークポイントを設定
- F9 を押して、コードの特定の行にブレークポイントを追加します。
- これにより、その行でプログラムが一時停止します。
- デバッグを開始
- F5 を押してデバッグモードに入ります。
- ステップ実行の操作
- ステップイン (F11) → 次の1行を実行し、関数があればその中に入る。
- ステップオーバー (F10) → 次の1行を実行するが、関数の中には入らない。
- ステップアウト (Shift + F11) → 現在の関数を終了し、呼び出し元に戻る。
(by Copilot)

※ただし、コンソールウインドウにフォーカスしている状況だと「F11」は全画面表示への切り替えになるため、コード編集画面をクリックしてから「F11」で処理を進めていって、結果を確認したいところまで進めたらコンソールウインドウに切り替える、という操作が必要。

コメント

タイトルとURLをコピーしました