演算子
C言語には様々な演算子があり、主に以下のカテゴリーに分類されます。
1. 算術演算子(Arithmetic Operators)
演算子 | 例 | 説明 |
---|---|---|
+ | a + b | 加算 |
- | a - b | 減算 |
* | a * b | 乗算 |
/ | a / b | 除算 |
% | a % b | 剰余(余りを求める) |
2. 代入演算子(Assignment Operators)
演算子 | 例 | 説明 |
---|---|---|
= | a = b | aにbを代入 |
+= | a += 5 | a = a + 5 と同じ |
-= | a -= 2 | a = a - 2 と同じ |
*= | a *= 3 | a = a * 3 と同じ |
/= | a /= 4 | a = a / 4 と同じ |
%= | a %= 2 | a = 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 & b | AND(ビットごとの論理積) |
| | a | b | OR(ビットごとの論理和) |
^ | a ^ b | XOR(ビットごとの排他的論理和) |
~ | ~a | ビットごとの反転 |
<< | a << 2 | 左シフト |
>> | a >> 2 | 右シフト |
6. インクリメント・デクリメント演算子
演算子 | 例 | 説明 |
---|---|---|
++ | a++ | 1増やす(後置) |
-- | a-- | 1減らす(後置) |
++ | ++a | 1増やす(前置) |
-- | --a | 1減らす(前置) |
7. 条件演算子(三項演算子)
result = (a > b) ? a : b;
これは if
の簡易版で、「a > b
が真なら a
を、偽なら b
を result
に代入する」という意味になります。(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」で処理を進めていって、結果を確認したいところまで進めたらコンソールウインドウに切り替える、という操作が必要。
コメント