2012-12-20 6 views
6

この質問は、私が&についてバイナリANDとアドレスの両方として使用されていると思ったWhat is &&& operation in Cに対するものです。CでバイナリのANDとアドレスの両方に `&`が使用されているのはなぜですか?

これらの非常に異なるタスクに同じシンボルが使用されるのはなぜですか?それについて考えてみると、@はaddress-ofのより良いシンボルのようです。

実際にはコンパイラがほとんどの誤った使い方をキャッチするので、実際にはそれほど問題はないと思っていますが、実際にはバイナリを実行しているように見えるマクロを含むコードを作成することは可能でしょうのアドレスをしています。

+0

私はいつもこれを疑問に思ってきました。パスカルは '@'を使用しています。これは私にははるかに直感的です –

答えて

7

@は(あなたが選ぶとよいでしょう示唆されているように)「のアドレス」のために使用されなかった理由は、その文字が実際C.

の初期の頃に戻って使用された ISO 646 character set、の一部ではなかったということです

C のデザイナーはを使用して@を使用していることは確かですが、トリグラフシーケンスをデザインしていると思っています。 &&&が人のコードで表示されるという事実は、おそらく別のオペレータシンボルを選択するのに十分な理由とは考えられませんでした。

+0

合意された、人間にとってのあいまいさの唯一の理由は、空白を省略し、実際には巧妙ではなく、あいまいな言語機能を使用することによって賢明にしようとする人々です。 – thkala

+0

+1:歴史的な理由。より限定されたキャラクタセットは、なぜ同じキャラクタが複数の意味に使用されるのかを説明します。なぜなら、 '&'が複数の用途を持っている理由について質問するとき、 '&&&'は気にしていませんでした。 'a 'が' #define a'によって設定される 'a&b'のようなもの。これは「AND」のように見えますが、実際はそうではありません。うまくいけば、コンパイラは間違いを見つけ出すことができますが、それは結果を使用することに完全に依存します。 – Leo

7

2つの異なるものに使われている大きな理由はないと思います。

幸いなことに、1つの使用法が単項演算子であり、もう1つが2項演算子(つまり2つのオペランドを持つ)なので、あいまいさはありません。 *(乗算または逆参照)の場合は同値。

+0

+1、特に同義語 – Thilo

+0

これはビット単位のANDにも使用されます。したがって、バイナリ演算子でもあります。 – SidR

+0

^^バイナリANDで、ビット単位のANDと同じ意味です。 &&は論理とは呼ばれます。 – anishsane

関連する問題