zirconsoft’s blog

Microsoft関係について取り上げます。

1 + !0 は? C言語で確かめてみた

K&Rを読み始めました。

 

大学1年生の時に、初めて触ったプログラミング言語はCで、ポインタに慣れるまで苦労したのを覚えています。


そんな大学1年生の時から書き続けているC言語

学部3年生の後学期になって、やっとコンピュータサイエンスの基礎を少しずつ分かり始めてきた今このC言語が、これから先コンピュータサイエンスの教養を深めるためには、大変重要であることに気づきました。

コンピュータの基本となるプログラム、オペレーティングシステムや言語処理系、ネットワークシステムなどは、多くがC言語で書かれているからです。
そんなわけで、B.W.カーニハン博士とD.M.リッチー博士の書いた古典的名著プログラミング言語C第2版を読み始めました。

否定演算子について

K&Rの52ページに、否定演算子(!)はゼロ以外のものを0にし、0を1にすると書いてあります。

これはC言語にはブーリアン型がなく、0以外を真、0を偽とするしように基づくものです。
通常この否定演算子はif文やwhile文などのなかの条件式に使いますが、あえてこの否定演算子を、普通の算術演算子として使うとどうなるのか試してみました。


結果

実際に「1 + !0」gccコンパイルしてみました。

その結果、1+ !0 は2と評価されました。
この式は、定数の式なので、プログラムを動かす必要はなく「-S」オプションをつけて、アセンブリソースを見れば結果が分かります。
定数の式は、コンパイル時に評価されるからです。

 

考察

 

普通のプログラミングでは、こんな書き方は可読性が下がるのでほとんどしないと思います。
しかし、実際にどのように動作するか確認したことで、少し教養が高まった気がします。