C言語演算子完全ガイド:算術・関係・論理・ビット演算子
C言語プログラミング演算子
このチュートリアルでは、実例を通じてCプログラミングのさまざまな演算子について学びます。
動画: C言語の算術演算子
演算子は値や変数に対して演算を行う記号です。例:+は加算を行う演算子です。
C言語にはさまざまな演算を実行するための幅広い演算子があります。
C言語算術演算子
算術演算子は、数値(定数と変数)に対して加算、減算、乗算、除算などの数学的演算を行います。
| 演算子 | 意味 |
|---|---|
| + | 加算または単項プラス |
| - | 減算または単項マイナス |
| * | 乗算 |
| / | 除算 |
| % | 除算後の余り(剰余演算) |
例1: 算術演算子
// 算術演算子の動作
#include <stdio.h>
int main() {
int a = 9, b = 4, c;
c = a + b;
printf("a+b = %d \n", c);
c = a - b;
printf("a-b = %d \n", c);
c = a * b;
printf("a*b = %d \n", c);
c = a / b;
printf("a/b = %d \n", c);
c = a % b;
printf("aをbで割った余り = %d \n", c);
return 0;
}
出力
a+b = 13 a-b = 5 a*b = 36 a/b = 2 aをbで割った余り = 1
+、-、*は期待通り加算、減算、乗算を計算します。
通常の計算では9/4 = 2.25ですが、プログラムの出力は2です。
これは変数aとbが両方とも整数だからです。したがって出力も整数になります。コンパイラは小数点以下を切り捨て、2.25ではなく2を表示します。
剰余演算子%は余りを計算します。a=9をb=4で割ると余りは1です。%演算子は整数でのみ使用できます。
a = 5.0、b = 2.0、c = 5、d = 2とすると:
// いずれかのオペランドが浮動小数点数 a/b = 2.5 a/d = 2.5 c/b = 2.5 // 両オペランドが整数 c/d = 2
C言語インクリメントとデクリメント演算子
Cプログラミングには、オペランド(定数または変数)の値を1変更するインクリメント++とデクリメント--の2つの演算子があります。
インクリメント++は値を1増やし、デクリメント--は値を1減らします。これらは単項演算子で、単一のオペランドのみで動作します。
例2: インクリメントとデクリメント演算子
// インクリメントとデクリメント演算子の動作
#include <stdio.h>
int main() {
int a = 10, b = 100;
float c = 10.5, d = 100.5;
printf("++a = %d \n", ++a);
printf("--b = %d \n", --b);
printf("++c = %f \n", ++c);
printf("--d = %f \n", --d);
return 0;
}
出力
++a = 11 --b = 99 ++c = 11.500000 --d = 99.500000
ここでは++と--を前置として使用しています。これらは後置としてa++やa--のように使うこともできます。後置での動作については別ページで学習できます。
C言語代入演算子
代入演算子は変数に値を代入するために使われます。最も一般的なのは=です。
| 演算子 | 例 | 同じ意味 |
|---|---|---|
| = | a = b | a = b |
| += | a += b | a = a+b |
| -= | a -= b | a = a-b |
| *= | a *= b | a = a*b |
| /= | a /= b | a = a/b |
| %= | a %= b | a = a%b |
例3: 代入演算子
// 代入演算子の動作
#include <stdio.h>
int main() {
int a = 5, c;
c = a; // cは5
printf("c = %d\n", c);
c += a; // cは10
printf("c = %d\n", c);
c -= a; // cは5
printf("c = %d\n", c);
c *= a; // cは25
printf("c = %d\n", c);
c /= a; // cは5
printf("c = %d\n", c);
c %= a; // c = 0
printf("c = %d\n", c);
return 0;
}
出力
c = 5 c = 10 c = 5 c = 25 c = 5 c = 0
C言語関係演算子
関係演算子は2つのオペランド間の関係をチェックします。関係が真なら1、偽なら0を返します。
関係演算子は意思決定とループで使用されます。
| 演算子 | 意味 | 例 |
|---|---|---|
| == | 等しい | 5 == 3は0と評価 |
| > | より大きい | 5 > 3は1と評価 |
| < | より小さい | 5 < 3は0と評価 |
| != | 等しくない | 5 != 3は1と評価 |
| >= | 以上 | 5 >= 3は1と評価 |
| <= | 以下 | 5 <= 3は0と評価 |
例4: 関係演算子
// 関係演算子の動作
#include <stdio.h>
int main() {
int a = 5, b = 5, c = 10;
printf("%d == %d is %d \n", a, b, a == b);
printf("%d == %d is %d \n", a, c, a == c);
printf("%d > %d is %d \n", a, b, a > b);
printf("%d > %d is %d \n", a, c, a > c);
printf("%d < %d is %d \n", a, b, a < b);
printf("%d < %d is %d \n", a, c, a < c);
printf("%d != %d is %d \n", a, b, a != b);
printf("%d != %d is %d \n", a, c, a != c);
printf("%d >= %d is %d \n", a, b, a >= b);
printf("%d >= %d is %d \n", a, c, a >= c);
printf("%d <= %d is %d \n", a, b, a <= b);
printf("%d <= %d is %d \n", a, c, a <= c);
return 0;
}
出力
5 == 5 is 1 5 == 10 is 0 5 > 5 is 0 5 > 10 is 0 5 < 5 is 0 5 < 10 is 1 5 != 5 is 0 5 != 10 is 1 5 >= 5 is 1 5 >= 10 is 0 5 <= 5 is 1 5 <= 10 is 1
C言語論理演算子
論理演算子を含む式は、式が真か偽かに応じて0または1を返します。論理演算子はCプログラミングでの意思決定でよく使われます。
| 演算子 | 意味 | 例 |
|---|---|---|
| && | 論理AND。すべてのオペランドが真の場合のみ真 | c=5, d=2なら((c==5) && (d>5))は0 |
| || | 論理OR。いずれかのオペランドが真なら真 | c=5, d=2なら((c==5) || (d>5))は1 |
| ! | 論理NOT。オペランドが0の場合のみ真 | c=5なら!(c==5)は0 |
例5: 論理演算子
// 論理演算子の動作
#include <stdio.h>
int main() {
int a = 5, b = 5, c = 10, result;
result = (a == b) && (c > b);
printf("(a == b) && (c > b) is %d \n", result);
result = (a == b) && (c < b);
printf("(a == b) && (c < b) is %d \n", result);
result = (a == b) || (c < b);
printf("(a == b) || (c < b) is %d \n", result);
result = (a != b) || (c < b);
printf("(a != b) || (c < b) is %d \n", result);
result = !(a != b);
printf("!(a != b) is %d \n", result);
result = !(a == b);
printf("!(a == b) is %d \n", result);
return 0;
}
出力
(a == b) && (c > b) is 1 (a == b) && (c < b) is 0 (a == b) || (c < b) is 1 (a != b) || (c < b) is 0 !(a != b) is 1 !(a == b) is 0
論理演算子プログラムの説明
(a == b) && (c > 5)は両オペランドが1(真)なので1と評価(a == b) && (c < b)はオペランド(c < b)が0(偽)なので0と評価(a == b) || (c < b)は(a = b)が1(真)なので1と評価(a != b) || (c < b)は両オペランドが0(偽)なので0と評価!(a != b)はオペランド(a != b)が0(偽)なので1(真)と評価!(a == b)は(a == b)が1(真)なので0(偽)と評価
C言語ビット演算子
計算時、加減乗除などの数学的演算はビットレベルに変換され、処理が高速化し省電力になります。
ビット演算子はCプログラミングでビットレベル操作を行うために使われます。
| 演算子 | 意味 |
|---|---|
| & | ビット単位AND |
| | | ビット単位OR |
| ^ | ビット単位排他的OR |
| ~ | ビット単位補数 |
| << | 左シフト |
| >> | 右シフト |
詳細は「C言語ビット演算子」を参照してください。
その他の演算子
カンマ演算子
カンマ演算子は関連する式を連結するために使われます。例:
int a, c = 5, d;
sizeof演算子
sizeofは、データ(定数、変数、配列、構造体など)のサイズを返す単項演算子です。
例6: sizeof演算子
#include <stdio.h>
int main() {
int a;
float b;
double c;
char d;
printf("Size of int=%lu bytes\n", sizeof(a));
printf("Size of float=%lu bytes\n", sizeof(b));
printf("Size of double=%lu bytes\n", sizeof(c));
printf("Size of char=%lu byte\n", sizeof(d));
return 0;
}
出力
Size of int = 4 bytes Size of float = 4 bytes Size of double = 8 bytes Size of char = 1 byte
三項演算子?:、参照演算子&、間接参照演算子*、メンバ選択演算子->については後のチュートリアルで説明します。
C言語
- マイクロプロセッサプログラミングの基礎
- C#演算子完全ガイド:C#における演算子の包括的解説
- C# ビット演算子とビットシフト演算子をマスターする:包括的ガイド
- C#名前空間完全ガイド:構成、スコープ、ベストプラクティス
- C++演算子完全ガイド:算術・代入・関係・論理・ビット演算子と実例
- C++配列を関数に渡す完全ガイド:1次元・多次元配列の実例付き
- C言語ユーザー定義関数の4つの実証済みパターン
- Cプログラミング入門:初心者向け包括チュートリアル
- Verilog演算子:合成に必須の算術・制御演算子
- Python 演算子完全マスター: 包括的ガイド
- Java演算子をマスター:種類、構文、実践例