算術演算子

C言語の算術演算子
演算子 説明
+ 加算
- 減算
* 乗算
/ 除算
% 剰余

比較演算子

C言語の比較演算子
演算子 説明
== 等しい
!= 等しくない
< 小さい
<= 以下
> 大きい
>= 以上

論理演算子

C言語の論理演算子
演算子 説明
&& 論理積(AND)
|| 論理和(OR)
! 否定(NOT)

ビット演算子

C言語のビット演算子
演算子 説明
<< 左シフト
>> 右シフト

プログラミング言語によっては、算術シフトと論理シフトで演算子が異なることがあるが、C言語ではそのような違いはない。符号あり(singed)数値をシフトする場合は算術シフト、符号なし(unsigned)数値をシフトする場合は論理シフトとなる。

sizeof

sizeof演算子は、データ型や変数の大きさをバイト単位で返します。

sizeof(データ型)
sizeof(変数名)

例えば sizeof(short)は2を返します。

配列を指定したときは、配列全体の大きさを返します。例えば short s[32]; という配列があった場合、sizeof(s) は64を返します。

インクリメント演算子

インクリメント演算子は、変数の値に1を加える演算子です。変数の前または後に ++ を付けます。

インクリメント演算子を変数の前に付けるか、後に付けるかで若干動作が異なります。どちらも変数の値に1を加えることは共通ですが、変数の値の評価の仕方が違います。

インクリメント演算子を変数の前に付けた場合、変数の値に1を加えてから、変数の値を評価します。インクリメント演算子を変数の後に付けた場合、変数の値を評価してから、変数の値に1を加えます。

たとえば、次のようなC言語のソースプログラムがあったとします。

int a, b = 1;
a = ++b;

この場合、まず変数 b の値である1に1を加えるので、変数 b の値が2になります。その後、変数 b の値である2が変数 a に代入されます。つまり、次のソースコードと同じ結果になる。

int a, b = 1;
b = b + 1;
a = b;

また、次のようなC言語のソースプログラムがあったとします。

int a, b = 1;
a = b++;

この場合、まず変数 b の値である1が変数 a に代入されます。代入が終わった後に、変数 b の値である1に1を加えて変数 b の値が2になります。つまり、次のソースコードと同じ結果になる。

int a, b = 1;
a = b;
b = b + 1;

関数の引数にインクリメント演算子を指定した場合、var++は関数の引数に変数varの値を渡した後に変数varの値を1増やし、++varは変数varの値を1増やした後に関数の引数に値を渡す。

#include <stdio.h>

void func(int a, int b)
{
    printf("func: a=%d, b=%d\n", a, b);
}

int main()
{
    int a = 1, b = 1;

    func(a++, ++b);
    printf("main: a=%d, b=%d\n", a, b);
}

上記のプログラムの実行結果は、次の通りとなる。

func: a=1, b=2
main: a=2, b=2

つまり、次のソースコードと同じ結果になる。

#include <stdio.h>

void func(int a, int b)
{
    printf("func: a=%d, b=%d\n", a, b);
}

int main()
{
    int a = 1, b = 1;

    b = b + 1;
    func(a, b);
    a = a + 1;
    printf("main: a=%d, b=%d\n", a, b);
}

デクリメント演算子

デクリメント演算子は、変数の値から1を減らす演算子である。変数の前または後に -- を付ける。

--variable
variable--

デクリメント演算子を変数の前に付けるか後ろにつけるかで変数の値の評価の仕方が違う点はインクリメント演算子と同じである。

演算子の優先順位

演算子には優先順位があります。次に演算子の優先順位を示します。

演算子の優先順位
優先順位演算子の種類演算子
高い


低い
左から右 関数、添え字、構造体、
後置インクリメント、後置デクリメント
() [] . -> ++ --
右から左 前置インクリメント、前置デクリメント、単項式 ++ -- ! ~ + - * & sizeof
キャスト(型)
左から右 剰除余* / %
加減+ -
シフト<< >>
比較< <= > >=
等値、非等値== !=
ビット AND&
ビット XOR^
ビット OR|
論理積&&
論理和||
右から左 3項演算子? :
代入演算子、複合代入演算子 = += -= *= /= %= &= ^= |= <<= >>=
左から右 順次演算子,

(優先順位の高い演算子である)括弧で括ることにより、演算子の優先順位を変えることができます。

次の例では、まず b * c が計算されて、その値と a が足し算されます。

ans = a + b * c;

括弧で括ることにより、a + b を先に計算させることができます。

ans = (a + b) * c;
スポンサーリンク