[C言語入門] 演算子の使い方(3)
高木です。こんばんは。
前回、前々回に続き、C言語の演算子の使い方について解説します。
今回も侍エンジニア塾の「【C言語入門】演算子の使い方一覧(優先順位/余り/インクリメント)」にインスパイアされたものです。
繰り返しになりますが、この連載はすでに1札以上の入門書を読んで理解された方を対象としています。
入門書では書き切れていない一歩踏み込んだ知識を提供できればと考えています。
それでは、早速解説に入りましょう。
今回は「単項演算子」です。
単項演算子
前々回に演算子の一覧を紹介した際にも書きましたが、ここでいう「単項演算子」は前置形式のものです。
狭義の単項演算子といってもよいでしょう。
単項演算子の解説はかなり長いので何回かに分割することにします。
前置増分演算子と前置減分演算子
前回は後置形式の増分演算子と減分演算子を解説しましたが、今回は前置形式です。
インクリメント演算子とデクリメント演算子とも呼ばれるのは前置形式でも同じです。
後置形式同様、これらの演算子のオペランドは(修飾版または非修飾版の)実数型またはポインタ型でなければなりません。
++E
という式はE+=1
と同じ意味であると定義されています。
同様に、--E
はE-=1
と同じ意味になります。
具体的には、++E
はE
の値に1を足した値をE
に格納し、その値を評価結果とします。
実際にE
に値が格納されるのは、直前の副作用完了点から次の副作用完了点までのどこかの時点になります。
--E
についても、1を足す代わりに1を引くことを除き、++E
と同じです。
後置形式は1を足したり引いたりする前の値が評価結果になりました。
それに対して、前置形式では1を足したり引いたりしたあとの値が評価結果になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | int E; E = 0; printf("%d\n", ++E); E = 0; printf("%d\n", E++); E = 0; printf("%d\n", --E); E = 0; printf("%d\n", E--); /* 実行結果 1 0 -1 0 */ |
今回はここまでにしたいと思います。
次回は単項演算子の続きで、アドレス演算子と間接演算子の解説から再開します。