[C言語入門] 演算子の使い方(14)
高木です。こんばんは。
このネタもかなり長引いていますので、できることなら年内に決着を付けたいと考えています。
今年も残りわずかですので、これまでよりはピッチを上げて書いていくことにします。
今回は論理演算子について解説します。
残るは、条件演算子、代入演算子、コンマ演算子です。
それぞれ1回ずつで解説するとして、単純計算すれば今回を除いてあと3回で終わりそうです。
それでは、早速今回の解説に入りましょう。
論理AND演算子
論理AND演算子は論理積の演算を行う演算子で、&&を用います。
<iso646.h>ヘッダで定義されるand
マクロも論理AND演算子を表します。
論理AND演算子のオペランドは両方ともスカラ型でなければなりません。
スカラ型は算術型とポインタ型の総称です。
各オペランドがゼロに評価される場合は偽、ゼロ以外に評価される場合は真として、論理積を求めます。
評価結果はint型の0または1になります。
ビット単位の論理AND演算子とは異なり、左→右の順にオペランドを評価することが保証されています。
また、左オペランドの評価直後は「副作用完了点(sequence point)」になります。
「副作用完了点」についての解説は今回は省略しますので、興味のある方は自分で調べてみてください。
左オペランドの評価結果が偽の場合、右オペランドは評価されません。
これを「短絡評価」と呼びます。
論理OR演算子
論理OR演算子は論理和の演算を行う演算子で、||を用います。
<iso646.h>ヘッダで定義されるor
マクロも論理AND演算子を表します。
論理OR演算子のオペランドは両方ともスカラ型でなければなりません。
スカラ型は算術型とポインタ型の総称です。
各オペランドがゼロに評価される場合は偽、ゼロ以外に評価される場合は真として、論理和を求めます。
評価結果はint型の0または1になります。
ビット単位の論理OR演算子とは異なり、左→右の順にオペランドを評価することが保証されています。
また、左オペランドの評価直後は「副作用完了点」になります。
論理AND演算子と同様、論理OR演算子でも「短絡評価」が行われます。
左オペランドの評価結果が真の場合、右オペランドは評価されません。
ビット単位の演算子には排他OR演算子(^演算子)がありましたが、論理排他OR演算子というのは存在しません。
左右のオペランドが異なる場合に真になるのは!=演算子が相当します。
また、排他ORを求めるには、どちらか一方のオペランドだけでは評価結果が確定しませんので、「短絡評価」を行うことができません。