Previous: 論理演算
Up: 論理演算
Next: 論理 and
Previous Page: 論理演算
Next Page: 論理 and
例1
if ( ! a){
printf("a != 0 \n");
}
a が0以外の値(真)ならば0(偽)にし、0ならば、0以外の値(1)
にする。
例2
a=1;
if (! a==0){
printf("注意 \n");
}
この例は注意が必要である。何故ならば、否定演算子と関係演算子を混ぜて
使っており、一般には2つ以上の演算子を同時に使うと、どちらの演算から
行うかによって、結果が違ってしまう。そこで、混乱が生じないようにC言語
では、演算子には優先順位というものがあって、優先度の高い演算から先に
実行されるようになっている。上の例では、! a==0 と書いてあるので、あた
かも、a==0 が評価(a=1 だから偽)されてから否定(従って真)される様に
思うが、実は否定演算は関係演算よりも優先度が高いので、否定(!a)されて
から関係式が評価されている。勿論、今の場合は同じ結果を導くので、問題に
ならないが、こうした優先順位が問題を引き起こす場合もある。そこで、優先
順位はプログラマーが明示的に指示するようにした方が、無用な混乱がなく
堅実である。例えば、a==0 を先に評価したい場合は、!(a==0) のように
丸括弧を使えば、必ず丸括弧の中から評価される。反対に否定演算を先に評価
したい場合は、(!a)==0 と書けば良い。