[C言語入門] 演算子の使い方(1)

高木です。こんばんは。
先日予告したように、これからC言語の入門記事を連載していくことにします。
あらかじめお断りしておきますが、この連載では初学者に対して順序立ててC言語を解説していくものではありません。
ですので、まずは何でもいいのでC言語の入門書を1冊理解してから、こちらに戻ってきていただくとよいでしょう。
なお、最近はプログラミング未経験者はC言語から勉強すべきではないという主張も見かけます。
しかし、これは立場の違いによる意見なので、普遍的に通用するものではありません。
この辺りは、過去の記事「C言語は難しいのか?」を参照してください。
また、「C言語のバージョン」についても参考にしてください。
予告した際にも書きましたが、この連載は「侍エンジニア塾」のブログにインスパイアされた記事を書き綴っていくものです。
今回インスパイアされたのは「【C言語入門】演算子の使い方一覧(優先順位/余り/インクリメント)」です。
ちょっと長くなると思うので、何回かに分割することになるかと思います。
C言語では、加減乗除などさまざまな演算を行うために「演算子」を使います。
演算子というと難しく感じるかもしれませんが、簡単にいえば算数で使う+-×÷のようなものと考えてください。
演算子を使うには演算の対象となる「オペランド」が必要になります。
たとえば、2 + 3という式があったとすると、+が演算子、2や3がオペランドです。
加減乗除など、オペランドが2つ必要になる演算子を二項演算子といいます。
それに対して、+5とか-7のような符合を表す演算子はオペランドをひとつしか必要としませんので単項演算子といいます。
C言語には、1種類だけ、オペランドを3つ必要とする三項演算子がありますが、これについては後ほど説明します。
算数でも、1+2×3のような式は掛け算を先に計算することを小学校で習いました。
C言語でも、原則は左から右の順に演算を解決していくのですが、先ほどの掛け算のように優先的に演算しなければならないものがあります。
どの演算子から先に演算を行うかは、演算子の優先順位によって決められています。
C言語では、加減乗除などの計算目的の演算子のほか、配列や構造体の要素にアクセスしたり、関数を呼び出したりする目的でも演算子を使います。
「演算」という言葉の範囲は、単なる計算よりずっと広いのです。
これらを踏まえて、C言語の演算子を詳しく見ていくことにしましょう。
演算子の一覧
以下にC言語の演算子を優先順位が高いものから順に一通り挙げてみます。
もしかすると、ベテランの方でも初めて見る演算子が含まれているかもしれませんよ。
後置演算子
後置演算子は単項演算子の一種で、オペランドの後ろに演算子を記述するものです。
具体的には以下のものがあります。
| 添字演算子 | [] |
| 関数呼出演算子 | () |
| .演算子 | . |
| 矢印演算子 | -> |
| 後置増分演算子 | ++ |
| 後置減分演算子 | — |
単項演算子
C言語の標準規格では「単項演算子(unary operators)」となっていますが、前置形式の単項演算子のことです。
前置形式の単項演算子は、オペランドの前に演算子を記述します。
| 前置増分演算子 | ++ |
| 前置減分演算子 | — |
| sizeof演算子 | sizeof |
| _Alignof演算子 | _Alignof |
| アドレス演算子 | & |
| 間接演算子 | * |
| 単項+演算子 | + |
| 単項-演算子 | – |
| ~演算子 | ~ |
| !演算子 | ! |
キャスト演算子
キャスト演算子も単項演算子ですが、先ほどの単項演算子とは優先順位が異なるので、標準規格では別に分類されています。
| キャスト演算子 | (型名) |
乗除演算子
乗除演算子には乗算(掛け算)と除算(割り算)のほか、剰余算(割り算の余りを求める)のための二項演算子です。
| 乗算演算子 | * |
| 除算演算子 | / |
| 剰余演算子 | % |
加減演算子
加減演算子は文字通り、加算(足し算)と減算(引き算)のための二項演算子です。
| 加算演算子 | + |
| 減算演算子 | – |
ビット単位のシフト演算子
ビット単位のシフト演算子は、整数値を構成するビット左または右に指定した数だけずらす二項演算子です。
これについては後日詳しく解説します。
| 左シフト演算子 | << |
| 右シフト演算子 | >> |
関係演算子
関係演算子は、左右のオペランドの大小関係を比較するための二項演算子です。
不等号と考えるとよいでしょう。
| <演算子 | < |
| >演算子 | > |
| <=演算子 | <= |
| >=演算子 | >= |
等価演算子
等価演算子は、左右のオペランドが等しいか、あるいは等しくないかを判定するための二項演算子です。
| ==演算子 | == |
| !=演算子 | != |
ビット単位のAND演算子
ビット単位のAND演算子は、整数値を構成する各ビットについて論理積を求めるための二項演算子です。
| ビット単位のAND演算子 | & |
ビット単位の排他OR演算子
ビット単位の排他OR演算子は、整数値を構成する各ビットについて排他的論理和を求めるための二項演算子です。
| ビット単位の排他OR演算子 | ^ |
ビット単位のOR演算子
ビット単位のOR演算子は、整数値を構成する各ビットについて論理和を求めるための二項演算子です。
| ビット単位のOR演算子 | | |
論理AND演算子
論理AND演算子は、左右のオペランドをそれぞれ真または偽に評価し、その論理積を求めるための二項演算子です。
| 論理AND演算子 | && |
論理OR演算子
論理OR演算子は、左右のオペランドをそれぞれ真または偽に評価し、その論理和を求めるための二項演算子です。
| 論理OR演算子 | || |
条件演算子
C言語で唯一の三項演算子で、最初のオペランドの真偽によって、2番目または3番目のオペランドを評価結果とします。
| 条件演算子 | ? : |
代入演算子
代入演算子は、左側のオペランドに値を格納するための二項演算子です。
単に右オペランドの値を左オペランドに代入するだけの単純代入演算子のほか、何らかの演算を行った結果を代入する複合代入演算子があります。
| 単純代入演算子 | = |
| *=演算子 | *= |
| /=演算子 | /= |
| %=演算子 | %= |
| +=演算子 | += |
| -=演算子 | -= |
| <<=演算子 | <<= |
| >>=演算子 | >>= |
| &=演算子 | &= |
| ^=演算子 | ^= |
| |=演算子 | |= |
コンマ演算子
コンマ演算子は、まず左オペランドを評価し、次いで右オペランドを評価する二項演算子です。
| コンマ演算子 | , |
今回はざっと駆け足で、演算子の一覧を優先順位が高いものから順に並べてみました。
次回からはそれぞれの演算子について詳しく解説することにします。

