topazの遊び場

いろいろやってみる

そろそろC++やるぞパート20 演算子

そろそろC++やります

そろそろC++をやります。そろそろC++をやりたいからです。
何回やるかはわかりません。基礎を理解するまではやろうと思います。

という感じでやっています。

※ 初心者がメモレベルで記録するので、技術記事としてはお力になれないかもしれません。

内容

演算子

加減乗除+ - * /)や配列の添字演算子[ ])など、いろいろな演算をするための記号や文字です。

C++演算子は、C言語の全ての演算子にいくつかの新しい演算子が加えられてできています。

優先順位と結合規則

優先順位
複数の演算子が含む式で、どの演算子を先に演算するかの規則
結合規則
同じ優先順位の演算子を含む式ではどちらを先に演算するかの規則

例えばこの文の場合は1 + 2 * 3 / 2は式になります。

int a = 1 + 2 * 3 / 2;

優先順位は、乗算(*)と除算(/)が同じで、その下に加算(+)があります。

`*` = `/` > `+`

*/の順番は優先順位が同じなので、結合規則で決まります。これらの結合規則は左結合なので、*を先に計算します。

当たり前のようにやっていますが、このような仕組みになっています。

より複雑になったりしたら、明示的に書く場合もあります。

int a = 1 + ((2 * 3) / 2);

代替スペル/代替表現

一部の演算子の代替スペルが<iso646.h> ヘッダーにマクロとして定義されています。

例えばこのように書き換えられます。

// 変更前
if (a > 0 && a < 10)
// 変更後
if (a > 0 and a < 10)

他にもこれらが<iso646.h>に定義されています。

#define and    &&
#define and_eq &=
#define bitand &
#define bitor  |
#define compl  ~
#define not    !
#define not_eq !=
#define or     ||
#define or_eq  |=
#define xor    ^
#define xor_eq ^=

こちらにも、書いてある通り、使わずに普通に書いた方が良さそうです。

優先順位と結合規則リスト

それぞれの演算子の詳細はのちのち行います。

[ ]の中が低い方優先されます。`[3]`のみ右から左への結合なので注意が必要です。

[ 1 ]: 結合規則なし

[ 2 ]: 左から右へ結合

[ 3 ]: 右から左へ結合

[ 4 ]: 左から右へ結合

[ 5 ]: 左から右へ結合

[ 6 ]: 左から右へ結合

[ 7 ]: 左から右へ結合

[ 8 ]: 左から右へ結合

[ 9 ]: 左から右へ結合

[ 10 ]: 左から右へ結合

[ 11 ]: 左から右へ結合

  • ビット処理排他的 OR 演算子^

[ 12 ]: 左から右へ結合

  • ビット処理包括的 OR 演算子|

[ 13 ]: 左から右へ結合

[ 14 ]: 左から右へ結合

[ 15 ]: 左から右へ結合

[ 16 ]: 左から右へ結合

参考リスト

感想

基本に立ち返って演算子を行いました。基本の基本。だいたいわかりますが、メンバーへのポインター演算子.*, ->*)なんてあるのか、と思いました。

次回からは、それぞれの演算子について一つずつ使用例を確認します。