next up previous contents
Next: 6.1.2 論理 and Up: 6.1 論理演算 Previous: 6.1 論理演算

6.1.1 否定

        例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 と書けば良い。



Noriyo Kanayama