ユーニックス総合研究所

  • home
  • archives
  • c-enzanshi-itiran

C言語の演算子の一覧と解説

  • 作成日: 2024-03-20
  • 更新日: 2024-03-20
  • カテゴリ: C言語

C言語の演算子の一覧を解説します。

C言語や他の言語を扱うYoutubeも公開しています。
興味がある方は以下のリンクからご覧ください。

Youtubeの当チャンネル

関連記事
C言語のはてな(?)を使った三項演算子の書き方
C言語のノットイコール演算子の使い方
C言語の代入演算子で変数に値を代入する方法
C言語のビットをシフト演算子で操作する【<<, >>, 左シフト、右シフト】

() 関数呼び出し

関数を呼び出すときに使われる演算子です。
カッコの中には引数が書かれることがあります。

cos(3.14);  
sin(3.14);  

[] 配列添え字

配列の宣言時の要素の数の指定と、配列の要素を参照するときの添え字の指定に使われます。
角カッコの中に数字や変数を置きます。
配列の添え字は0から始まります。

int ary[3];  
ary[0] = 1;  
ary[1] = 2;  
ary[2] = 3;  

. 直接メンバ

構造体のメンバ変数を参照するときの演算子です。
構造体変数はポインタではないです。

struct Animal {  
    int age;  
};  

struct Animal animal;  
animal.age = 10;  

-> 間接メンバ

構造体のメンバ変数を参照するときの演算子です。
構造体変数はポインタです。

struct Animal {  
    int age;  
};  

struct Animal animal;  
struct Animal *p = &animal;  
p->age = 10;  

++ 後置インクリメント

変数の後ろに書くインクリメントです。
変数の値を参照した後に値を1増加させます。

int a = 1;  
int b = a++;  
printf("%d\n", a);  // 2  
printf("%d\n", b);  // 1  

-- 後置デクリメント

変数の後ろの書くデクリメントです。
変数の値を参照した後に値を1減少させます。

int a = 1;  
int b = a--;  
printf("%d\n", a);  // 0  
printf("%d\n", b);  // 1  

++ 前置インクリメント

変数の前に書くインクリメントです。
変数の値を1増加した後に値を参照します。

int a = 1;  
int b = ++a;  
printf("%d\n", a);  // 2  
printf("%d\n", b);  // 2  

-- 前置デクリメント

変数の前に書くデクリメントです。
変数の値を1減少させた後に値を参照します。

int a = 1;  
int b = --a;  
printf("%d\n", a);  // 0  
printf("%d\n", b);  // 0  

sizeof バイト数を求める

変数のバイト数を求めます。
配列に使った場合は配列のバイト数が求まります。
ポインタ変数に使った場合はポインタ変数のバイト数です。

int a;  
printf("%ld\n", sizeof a);  // 4  

int ary[4];  
printf("%ld\n", sizeof ary);  // 16  

int *p;  
printf("%ld\n", sizeof p);  // 8  

& アドレスを取り出す

変数のアドレスを取り出します。
アドレスはポインタ変数に格納することができます。

int a;  
int *p = &a;  

* 間接参照

ポインタから間接的にメモリを参照します。
ポインタに変数のアドレスが入っている場合は変数の値を参照します。

int a = 1;  
int *p = &a;  
printf("%d\n", *p);  // 1  

+ 単項プラス

変数や値の前に書くプラス記号です。

printf("%d\n", +1);  // 1  

int n = 1;  
printf("%d\n", +n);  // 1  

- 単項マイナス

変数や値の前に書くマイナス記号です。

printf("%d\n", -1);  // -1  

int n = -1;  
printf("%d\n", -n);  // 1  

~ ビット反転

ビット列を反転させます。

char n = 128;  
printf("%d\n", ~n);  // 127  

! 否定(NOT)

否定を行う演算子です。
真を偽に、偽を真にします。

printf("%d\n", !1);  // 0  
printf("%d\n", !0);  // 1  

(型) キャスト

型をキャストします。
特定の型に変換する演算子です。

char *s = (char *) malloc(100);  

+ 加算

足し算です。

int a = 1 + 2;  
printf("%d\n");  // 3  

- 減算

引き算です。

int a = 1 - 2;  
printf("%d\n");  // -1  

* 乗算

掛け算です。

int a = 2 * 3;  
printf("%d\n", a);  // 6  

/ 除算

割り算です。

int a = 4 / 2;  
printf("%d\n", a);  // 2  

% 剰余

割り算の余りを求めます。

int a = 5 % 3;  
printf("%d\n", a);  // 2  

<< 左シフト

ビット列を左にシフトします。

int a = 1 << 1;  
printf("%d\n", a);  // 2  

int b = 16 << 1;  
printf("%d\n", b);  // 32  

>> 右シフト

ビット列を右にシフトします。

int a = 16 >> 1;  // 8  
printf("%d\n", a);  

int b = 2 >> 1;  
printf("%d\n", b);  // 1  

< 小なり

左辺が右辺より小さい場合に真を返します。

if (1 < 2) {  
    printf("small\n");  
}  

> 大なり

左辺が右辺より大きい場合に真を返します。

if (2 > 1) {  
    printf("big\n");  
}  

<= 以下

左辺が右辺以下の場合に真を返します。

if (1 <= 2) {  
    printf("small\n");  
}  

>= 以上

左辺が右辺以上の場合に真を返します。

if (2 >= 1) {  
    printf("big\n");  
}  

== 等値

左辺と右辺が等しい時に真を返します。

if (1 == 1) {  
    printf("equal\n");  
}  

!= 不等

左辺と右辺が等しくない時に真を返します。

if (1 != 2) {  
    printf("not equal\n");  
}  

& ビット積

ビット列の積を取ります。

int a = 1 & 0;  
printf("%d\n", a);  // 0  

int b = 1 & 1;  
printf("%d\n", b);  // 1  

^ ビット差

ビット列の差を取ります。

int a = 1 ^ 0;  
printf("%d\n", a);  // 1  

int b = 1 ^ 1;  
printf("%d\n", b);  // 0  

| ビット和

ビット列の和を取ります。

int a = 1 | 0;  
printf("%d\n", a);  // 1  

int b = 1 | 1;  
printf("%d\n", b);  // 1  

&& 論理積

左辺と右辺がともに真の時に真を返します。

if (1 && 1) {  
    printf("true\n");  
}  

|| 論理和

左辺または右辺が真の時に真を返します。

if (1 || 0) {  
    printf("true\n");  
}  

? : 三項演算子

?の前の式が真であれば?の後の式を、偽であれば:の後の式を実行します。

int a = 1 ? 2 : -2;  
printf("%d\n", a);  // 2  

int b = 0 ? 2 : -2;  
printf("%d\n", b);  // -2  

= 単純代入

変数に値を代入します。

int a = 1;  

+= 加算代入

変数に値を加算代入します。

int a = 0;  
a += 2;  
printf("%d\n", a);  // 2  

-= 減算代入

変数に値を減算代入します。

int a = 0;  
a -= 2;  
printf("%d\n", a);  // -2  

*= 乗算代入

変数に値を乗算代入します。

int a = 2;  
a *= 2;  
printf("%d\n", a);  // 4  

/= 除算代入

変数に値を除算代入します。

int a = 4;  
a /= 2;  
printf("%d\n", a);  // 2  

%= 剰余代入

変数に値を剰余代入します。

int a = 5;  
a %= 3;  
printf("%d\n", a);  // 2  

<<= 左シフト代入

変数に左シフト代入します。

int a = 1;  
a <<= 1;  
printf("%d\n", a);  // 2  

>>= 右シフト代入

変数に右シフト代入します。

int a = 2;  
a >>= 1;  
printf("%d\n", a);  // 1  

&= ビット積代入

変数にビット積代入します。

int a = 1;  
a &= 1;  
printf("%d\n", a);  // 1  

^= ビット差代入

変数にビット差代入します。

int a = 1;  
a ^= 1;  
printf("%d\n", a);  // 0  

|= ビット和代入

変数にビット和代入します。

int a = 1;  
a |= 0;  
printf("%d\n", a);  // 1  

, 順次

計算式を並べて順次実行します。

1 + 2, 2 + 3;